Raj*_*Rao 6 wpf design-patterns model mvvm
考虑使用MVVM编写的WPF应用程序.应用程序需要显示Employees列表(FirstName,LastName,Title),您可以选择要删除的多个.
在这种情况下,模型将是" Employee ",它将实现INotifyPropertyChanged.
View将是" EmployeeListView ",它将实现XAML以显示Employees的集合.
ViewModel将是" EmployeeListViewModel ",它将公开一个ObservableCollection,它可以绑定到EmployeeListView.
我的问题是:" IsSelected "财产应该在哪里居住?
创建一个可重用的Generic SelectableItem,它包装EmployeeList中的每个项目:
简单的例子:
public class SelectableItem<T>: INotifyPropertyChanged
{
public bool IsSelected {get;set;} //PropertyChanged(), etc
public T Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
然后在ViewModel中:
public ObservableCollection<SelectableItem<Employee>> Employees {get;set;}
Run Code Online (Sandbox Code Playgroud)
并在视图中:
<DataTemplate>
<CheckBox IsChecked="{Binding IsSelected}" Content="{Value.FullName}"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
然后您可以通过以下方式检索所有选定的员工
var selectedemployees = Employees.Where(x => x.IsSelected).Select(x => x.Value);
Run Code Online (Sandbox Code Playgroud)