WPF MVVM模式ObservableCollection

时间:2012-04-05 05:40:05

标签: wpf mvvm observablecollection

由于mvvm模式,模型应该不了解ViewModel。

如果我在其中一个模型中创建 ListBox 字段,该怎么办?看起来很好,正确。 但下一步我必须将此值与ModelView中的ObservableCollection绑定。

我可以这样做:

var myCollection = new ObservableCollection(myList);

但在这种情况下,我失去了OC的所有优势。这个集合是静态的,并且我的视图中没有插入或更新反映到这个集合。

有什么想法?

2 个答案:

答案 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更新时,都会将基础模型与更改同步。