【发布时间】:2020-05-09 17:48:07
【问题描述】:
下面我有一个带有城市的ListView,当检查城市时,第二个列表(与人员)必须仅显示该城市的人。
<ListView ItemsSource="{Binding Cities}">
<ListView.ItemTemplate >
<DataTemplate>
<StackPanel>
<Label Content="{Binding Name}" />
<CheckBox IsChecked="{Bidning IsChecked}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
还有第二个人员列表视图:
<ListView ItemsSource="{Binding Persons}">
<ListView.ItemTemplate >
<DataTemplate>
<StackPanel>
<Label Content="{Binding Name}" />
<Label Content="{Bidning Surname}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
您可以在下面看到带有与 ListViews 绑定的列表的视图模型。
public ListCollectionView Cities
{
get { return _cities; }
set
{
_cities = value;
RaisePropertyChanged();
}
}
public ListCollectionView Persons
{
get { return _persons; }
set
{
_persons= value;
RaisePropertyChanged();
}
}
问题是当用户选中 Cities ListView 内的复选框时如何处理,以便我可以刷新 Persons 列表并仅从选中的 City 返回 Persons?我不知道在View Model中应该写什么,所以当ListView children属性发生变化时我不知道如何处理。
【问题讨论】:
-
您可以管理选定的城市并在人员列表发生变化时更新它
-
请注意,Cities 和 Persons 集合的类型不应是 ListCollectionView,而是
List<T>或ObservableCollection<T>,其中 T 是 City 或 Person。 -
如果一个给定的人与一个特定的城市相关联,那么我希望一个城市有一个可观察的 Person 集合作为它的属性之一。然后,您可以将人员列表视图的 itemssource 绑定到 selectedCity.People。从 City 项目模板中删除复选框,并使用 City 的选择来驱动对哪个城市的人感兴趣。您还需要绑定选定的城市项目或将人员列表视图绑定到选定项目。城市列表视图的人员。
标签: c# wpf listview binding viewmodel