0

監視可能なコレクションを使用して完全に設定された ViewModel があり、インターフェイスで指定されたスケジュールにドリルダウンすることができ、曜日ごとに表示したいと考えています。 24 時間)。以下は、ViewModel コードと View コードです。

私の質問は、ユーザー コントロールを使用する最善の方法は何かということです。毎日ユーザー コントロールが必要なので、スケジュールごとに同じ種類のコントロールを 7 つ用意しますが、何らかの方法でデータ バインド データをユーザー コントロールに取り込む必要があります。カスタムの依存関係プロパティを作成し、96 個の変数すべてを渡す必要がありますか?

コントロール内でこれを行う場合、96 列と 3 行のグリッドをハード コードし、各データ片を対応する四角形に入力しますか?

私の目標は、曜日がテキストとして表示され、下部に時間が表示され、15 分ごとに色で表示されるサイズ変更可能なスケジュール コントロールを作成することです。各セグメントは、たとえば、赤、青、または緑にすることができます。グリッドと長方形を使用する前は、ウィンドウに合わせてサイズ変更されていました。画面上に図形を描画するより良い方法はありますか? キャンバス?

ありがとう、ウェズリー

public class ScheduleVM
{
    public ObservableCollection<Schedule> schedules { get; set; }

    private static ScheduleVM viewModel = null;

    public static ScheduleVM getInstance()
    {
        if (viewModel == null)
            viewModel = new ScheduleVM();

        return viewModel;
    }

    private ScheduleVM()
    {
        schedules = new ObservableCollection<Schedule>();

        for (byte i = 0; i < 32; i++)
            schedules.Add(new Schedule());
    }
}

public class Schedule
{
    public ObservableCollection<Day> days { get; set; }

    public Schedule()
    {
        days = new ObservableCollection<Day>();

        for (byte i = 0; i < 8; i++)
        {
            ObservableCollection<int> values = new ObservableCollection<int>();

            for (byte j = 0; j < 96; j++)
                values.Add(3);

            days.Add(new Day() { data = values });
        }
    }
}

public class Day : BaseVM
{
    private ObservableCollection<int> _data;
    public ObservableCollection<int> data
    {
        get
        {
            return _data;
        }
        set
        {
            _data = value;
            OnPropertyChanged("data");
        }
    }
}

以下は私の現在のXAMLです

<ItemsControl Name="schedule">
        <ItemsControl.Resources>
            <converters:OnOffColorConverter x:Key="colorConverter"/>
        </ItemsControl.Resources>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <controls:Day data="{Binding}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
4

1 に答える 1

0

次のようなことについて話している: ItemsControl をスケジュールにバインドし、テンプレートで、項目ソース「日」を使用してカスタム リストボックスを作成し、そのリストボックスの itemtemplate を日コントロールにしますか? 私はそれをテストしていないか、それがあなたが意図した配置であるかどうかを知りませんが、ここに簡単なドラフトがあります.

    <ItemsControl Name="schedule"
                  ItemsSource="{Binding schedules}">
        <ItemsControl.Resources>
            <converters:OnOffColorConverter x:Key="colorConverter"/>
        </ItemsControl.Resources>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ListBox ItemsSource="{Binding days}">
                    <ListBox.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"/>
                        </ItemsPanelTemplate>
                    </ListBox.ItemsPanel>
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <controls:Day data="{Binding}" />
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
于 2013-07-15T20:18:24.380 に答える