1

由于 mvvm 模式,模型不应该对 ViewModel 有任何了解。

如果我在其中一个模型中创建一个ListBox字段怎么办?看起来不错。但下一步我必须将此值绑定到 ModelView 中的 ObservableCollection。

我可以做这个:

var myCollection = new ObservableCollection (myList);

但在这种情况下,我失去了 OC 的所有优势。这个集合是静态的,插入或更新都不会反映在与这个集合相关的我的视图中。

有什么想法吗 ?

4

2 回答 2

2

您通常使用 ObservableCollection,因为它会自动更新接口。我认为您正在以错误的方式做某事。在您的 ViewModel 中,您拥有带有元素列表的 ObservableCollection,您可以使用普通列表或元素数组对其进行初始化。你不应该用你的 ListBox 来初始化你的 OC。在你必须在你的视图中绑定它之后。当您在 OC 中添加元素时,视图将更新。

于 2012-04-05T06:01:32.850 回答
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 更新时,您都会将底层模型与更改同步。

于 2012-04-05T06:04:42.167 回答