C# 在窗口上绘制明细表网格的最佳方法
我有一个完全使用可观察集合设置的ViewModel,并且能够在我的界面中深入到指定的时间表,并且希望显示一周中的每一天,对于每一天,我希望能够显示96个不同的时间段(24小时内以15分钟为增量)。下面是ViewModel代码和视图代码 我的问题是使用用户控件的最佳方式是什么。我希望每天都有一个用户控件,因此每个计划中有7个相同类型的控件,但我需要某种方法将数据绑定数据放入用户控件中。我是否需要自定义依赖项属性并传入所有96个变量 如果我在控件中这样做一次,我是否会硬编码出一个96列三行的网格,并将每个数据块键入相应的矩形中 我的目标是拥有一个可重新调整大小的日程控件,该控件将一周中的某一天作为文本,在底部显示小时数,并以颜色表示每15分钟一次。例如,每个段可以是红色、蓝色或绿色。在使用网格和矩形之前,它会根据窗口重新调整大小,这很好。有没有更好的方法在屏幕上绘制形状?帆布 谢谢, 卫斯理C# 在窗口上绘制明细表网格的最佳方法,c#,wpf,xaml,user-interface,binding,C#,Wpf,Xaml,User Interface,Binding,我有一个完全使用可观察集合设置的ViewModel,并且能够在我的界面中深入到指定的时间表,并且希望显示一周中的每一天,对于每一天,我希望能够显示96个不同的时间段(24小时内以15分钟为增量)。下面是ViewModel代码和视图代码 我的问题是使用用户控件的最佳方式是什么。我希望每天都有一个用户控件,因此每个计划中有7个相同类型的控件,但我需要某种方法将数据绑定数据放入用户控件中。我是否需要自定义依赖项属性并传入所有96个变量 如果我在控件中这样做一次,我是否会硬编码出一个96列三行的网格,并
公共类ScheduleVM
{
公共可观察收集计划{get;set;}
私有静态ScheduleVM viewModel=null;
公共静态ScheduleVM getInstance()
{
if(viewModel==null)
viewModel=newschedulevm();
返回视图模型;
}
私有ScheduleVM()
{
附表=新的可观测集合();
用于(字节i=0;i<32;i++)
附表。添加(新附表());
}
}
公课时间表
{
公共可观察收集天数{get;set;}
公共附表(
{
天数=新的可观察集合();
用于(字节i=0;i<8;i++)
{
ObservableCollection值=新的ObservableCollection();
用于(字节j=0;j<96;j++)
增加(3);
添加(新的日期(){data=values});
}
}
}
公共课日:BaseVM
{
私有可观测收集数据;
公共可观测收集数据
{
得到
{
返回数据;
}
设置
{
_数据=价值;
OnPropertyChanged(“数据”);
}
}
}
下面是我当前的XAML
<ItemsControl Name="schedule">
<ItemsControl.Resources>
<converters:OnOffColorConverter x:Key="colorConverter"/>
</ItemsControl.Resources>
<ItemsControl.ItemTemplate>
<DataTemplate>
<controls:Day data="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
您是否在谈论这样的事情:将您的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>
有人有什么建议吗?我现在也有类似的建议,我的问题不是数据模板部分,而是如何构造“Day”类。现在,在我的Day构造函数中,我只是有一堆循环将UI元素添加到网格(文本框和矩形)。它可以工作,但会导致加载时出现非常轻微的延迟,当我调整窗口大小时,我想这取决于您要查找的内容,但是您的类似乎很好,除非您希望将“数据”作为类列表,例如带有时间和任何信息的“ScheduledEvent”类。然后使用类似于outlook的模板(每行有一个时间)或wrappanel itemspanel绑定到一个列表框,以便它们可以是块。无论哪种方式,另一个列表可能也会更好,因为不是所有的东西都是可见的。如果您使用水平列表,您还可以按时间分组(例如按小时)来保存ScheduledEvent
<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>