我的MVVM WPF应用程序的GridView动态创建列目前已结合到一个ViewModel财产,已在XAML中定义的列一个GridView:在WPF MVVM
<ListView Grid.Row="0" ItemsSource="{Binding GroupedOrders}">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Item2, Mode=OneWay}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Date" DisplayMemberBinding="{Binding Item1.Date, StringFormat={}{0:dd/MM/yyyy}}" />
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Item1.Name}" />
<!-- lots more -->
</GridView>
</ListView.View>
</ListView>
GroupedOrders是一个元组的一个ObservableCollection两种不同的项目类型:一个“订单”对象和一个布尔值,用于控制是否对于此特定视图“已选择”。
然而,“选择”属性尚未建模很好。显而易见,每个订单需要多个“选定”属性,具体取决于订单中的日期数量,可以是1到5之间。
要在UI模型这个,我需要与创建顺序每个日期类似的复选框GridviewColumn动态构造来取代单个复选框GridViewColumn。因此,GroupedOrders变成了Tuple <Order, List<bool>>
,并且列表中的每个布尔都需要一列。
在任何给定的情况下,该列表的大小将是网格中的所有订单相同。但是,如果用户将新数据加载到网格中,则列表的大小将会改变。
不过,我看不出如何在MVVM做到这一点。现有的解决方案似乎适用于代码隐藏的情况,即GridView可以作为对象抓取并即时操作。我见过的唯一的MVVM解决方案是使用一个Converter来动态构建整个GridView,这对于这种情况似乎是巨大的矫枉过正,在GridView中有很多列,但只有一小部分需要动态。
还有别的办法吗?
背后,你能不能请进一步解释有关'多个 “选择” properties'?这是'Dictionary'种类,每行将有“多选的属性”相同的计数? –
@YuliamChandra谢谢!它目前是Tuple,但效果大致相同。它需要成为一个元组<订单,列表>,以便每个日期可以独立选择。对于给定的实例,每行都有相同的日期数量,但如果用户将一些新数据加载到数据网格中,它可能会更改。我编辑了这个问题来反映这一点。是否有意义? –
嗯..如果'States'是一个Order中的一个集合,那么这个列就是一个绑定到State的'ListView'? State是一个包含Name(字符串)和Value(布尔)属性的类吗? –