由于mvvm模式,模型应该不了解ViewModel。
如果我在其中一个模型中创建 ListBox 字段,该怎么办?看起来很好,正确。 但下一步我必须将此值与ModelView中的ObservableCollection绑定。
我可以这样做:
var myCollection = new ObservableCollection(myList);
但在这种情况下,我失去了OC的所有优势。这个集合是静态的,并且我的视图中没有插入或更新反映到这个集合。
有什么想法?
答案 0 :(得分:2)
您通常使用ObservableCollection,因为它会自动更新接口。我认为你是以错误的方式做事。 在ViewModel中,您拥有带有元素列表的ObservableCollection,您可以使用常规列表或元素数组对其进行初始化。您不应该使用ListBox初始化OC。必须在视图中绑定它之后。 当您在OC中添加元素时,视图将更新。
答案 1 :(得分:1)
致电时
var myCollection = new ObservableCollection (ListBox)
您正在将myList的值复制到ObservableCollection中。这里没有更新ListBox列表。
如果这是所需效果,您可能希望使用以下命令更新ViewModel:
///...
var myCollection = new ObservableCollection (ListBox)
myCollection.CollectionChanged += (sender, args) => RefreshListBox(myCollection);
///...
private void RefrehListBox(ObservableCollection<...> collection){
//Refresh ListBox with collection
}
这样,每次ObservableCollection更新时,都会将基础模型与更改同步。