我必须创建一个基于WPF / MVVM的小型GUI,向用户显示从外部库中获取的对象列表。用户不能直接编辑这些对象,而只能选择它们以供进一步使用。 起初我可以直接在常规集合中使用给定的对象,因为我看不到需要INotifyPropertyChanged实现,但是后来我注意到我需要一个IsSelected属性,以便视图模型可以知道由哪个对象选择了用户,而且还有一种情况,我必须从视图模型中选择特定的对象。这意味着我必须以某种方式添加上述IsSelected属性,以使此方案在MVVM中工作。
我有什么选择?
我是否需要编写一个包装类,该包装类从外部类继承并仅通过所述IsSelected属性对其进行扩展?这意味着我还必须转换从外部库中获得的对象列表,然后才能使用它们。
或者是否有更方便的方法来扩展外部对象,以便我可以基于MVVM的方式处理选择?
答案 0 :(得分:1)
您可以在视图模型上定义所选对象的集合,例如:
public class YourViewModel
{
public List<Thing> SelectedThings { get; } = new List<Thing>();
}
由于内置WPF ListBox的SelectedItems属性不是DependencyProperty,因此无法绑定,因此可以使用
这样的简单事件处理程序来管理集合。<ListBox SelectionChanged="ListBox_SelectionChanged" />
在代码背后:
private YourViewModel vm;
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (var item in e.AddedItems)
{
vm.SelectedThings.Add(item);
}
foreach (var item in e.RemovedItems)
{
vm.SelectedThings.Remove(item);
}
}
如果您也想设置视图模型中的选定项目,那么我在这里找到了一个不错的解决方案,而不是事件处理程序:https://www.tyrrrz.me/Blog/WPF-ListBox-SelectedItems-TwoWay-binding