0

我有一个完全使用可观察集合设置的 ViewModel,并且能够在我的界面中向下钻取到指定的时间表,并希望显示一周中的每一天,并且每天我希望能够显示 96 个不同的时间段(15 分钟增量24 小时)。下面是 ViewModel 代码以及 View 代码。

我的问题是使用用户控件的最佳方式是什么。我希望每天都有一个用户控件,因此每个计划我将有 7 个相同类型的控件,但我需要某种方式将我的数据绑定数据放入用户控件中。我需要制作自定义依赖属性并传入所有 96 个变量吗?

如果我在控件内这样做一次,我是否会硬编码出一个 96 列和三行的网格并将每个数据块输入到相应的矩形中?

我的目标是有一个可调整大小的时间表控件,其中包含星期几作为文本,底部的小时数和每 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 绑定到 Schedules,然后在模板中构建一个带有项目源“days”的自定义列表框,并使该列表框的 itemtemplate 成为您的 day 控件?我尚未对其进行测试或知道这是否是您的意思,但这是一个快速草稿。

    <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 回答