ListViews的ItemsControl,绑定每个ListView的SelectedItem,其中ListViews的数量是动态的,MVVM

时间:2018-10-23 08:58:50

标签: c# wpf xaml mvvm data-binding

我有一个内部具有ListViews的ItemsControl,以创建自定义网格,如布局 代码大致如下所示,更改了名称并删除了不相关的样式。

每个ListView是由ItemsSubList的一个实例创建的,因此没有设置数量的列表框或属性。

有人知道如何将每个列表框的SelectedItem属性以某种方式绑定到一个列表中吗?

<ItemsControl ItemsSource="{Binding Items}">
  <ItemsControl.ItemsPanel>
     <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal"/>
     </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>

  <ItemsControl.ItemTemplate>
     <DataTemplate>
         <ListView ItemsSource="{Binding ItemsSubList}" 
                              DisplayMemberPath="ItemVersion" 
                              SelectionMode="Single"
                              Width="100"
                              VerticalAlignment="Top"
                              Background="#282828"
                              BorderBrush="#282828">
         </ListView>
     </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

1 个答案:

答案 0 :(得分:1)

我会在您的模型中解决它。 您的数据上下文似乎是具有类型Items的属性ObservableCollection<MyItem>和类MyItem的类,然后是类型ItemsSubList的属性ObservableCollection<MySubItem>。是吗?

ListView的数据上下文是MyItem类型的实例。您可以将属性SelectedSubItem添加到类MyItem中,并通过双向绑定将其绑定到列表框。SelectedItem。

然后在保存模型的主类中,以及属性Items所在的位置,我将添加一个属性 public List<MySubItem> SelectedSubItems => Items.Select(i => i.SelectedSubItem).ToList();,该属性可从所有项目中动态选择所有选定的子项目。