【发布时间】:2017-07-11 20:26:21
【问题描述】:
基本上这是一个与this one 非常相似的问题,最大的不同是我不能轻易“在模型中使用可观察的集合”;一个很好的例子是字典的 keycollection。
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
public class Data
{
private Dictionary<String, String> _randomData;
public Data()
{
_randomData = new Dictionary<String, String>();
}
public ICollection<string> RandomDataKeys {
get {
return _randomData.Keys;
}
}
public void AddElement(string k, string v) {
_randomData[k] = v;
}
}
public class DataViewModel
{
private Data _data;
public DataViewModel(Data data)
{
_data = data;
RandomData = new ObservableCollection<String>(_data.RandomDataKeys);
//obviously above wouldn't work, since it just copies the keys.
}
public ObservableCollection<String> RandomData {get; set;}
}
现在这里的常用方法是什么?备份是更改“添加”函数以告诉视图模型添加了新项目(但这需要模型具有有关视图模型的信息,显式调用视图模型上的函数以告诉视图模型保留模型的数据,这感觉很浪费而且很慢)。
【问题讨论】:
-
当您添加项目时,在您的模型中引发一个事件并在您的视图模型中订阅它。
-
这一切都取决于真正的代码实际上是什么样的,所以这个问题太宽泛了。唯一的共同点是,当底层数据发生变化时,您将需要某种机制来获得通知。显然,对于字典或其相关集合本身,这不会自动发生;您需要首先拥有进行任何修改的代码,然后更改 那个 代码以传递适当的通知。完成后,您可以直接向 WPF 公开数据和通知,或者通过例如调解。
ObservableCollection<T>.
标签: c# wpf mvvm data-binding