我使用可观察的集合完全设置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>
答案 0 :(得分:0)
你是在谈论这样的事情:将你的ItemsControl绑定到Schedules,然后在模板中,构建一个带有项目源“days”的自定义列表框,并使该列表框的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>