我从不同的列表更新列表时出现异常。例如:List我在List 1中有一些员工,并希望将其添加到已经有一些员工的List 2中。所以列表2变成了列表1+列表2。List 2绑定到UI。但我收到异常,说明List 2现在不一致。我可以使用ObservableCollection代替List,但List 2是提供的dll的一部分。我不能改变它。我该怎么走?
样本代码:
private void AddCommandFunction(object obj)
{
try
{
var lstToBeCopied= objToBeCopied //getting this from a different method
var myList= (Employee)obj;
foreach (var value in objToBeCopied.Employees)
{
myList.Employees.Add(value);
}
}
catch (Exception e)
{
}
} //getting exception after this point.
1条答案
按热度按时间ozxc1zmp1#
在MVVM中,视图模型是模型和视图之间的“翻译器”。模型以最方便的方式格式化它的数据。似乎你的
Employee
对象就是Model。视图模型现在需要创建一个可供视图使用的结构。在这种情况下,您可以使用ObservableCollection来 Package 列表。
你会想要初始化它,最有可能是在构造器中...
这将给予你一个可以通知的集合,但它是一个副本。修改集合不会更新回模型。我们必须手动操作。
回到视图模型构造器中,注册属性的事件:
最后,实施变更:
您可能还希望在事件中处理其他一些更改操作。这取决于你如何使用它。
缺陷:不幸的是,这不是一个完美的实现。如果有任何东西试图直接修改模型中的列表,则无法更新ObservableCollection,除非模型有自己的事件,您可以观察到该事件,以让您知道要更新。但是,如果您控制List并且可以确保没有任何东西直接修改它,那么只要您始终修改ObservableCollection而不是直接修改原始列表,此解决方案就可以工作。