假设我有一个模型类 Data
,我想为它创建 DataViewModel
和 DataView
。数据类如下所示:
public class Data
{
public Data()
{
RandomData = new List<String>();
}
public List<String> RandomData {get; set;}
}
我想创建封装 RandomData
属性的 DataViewModel
。我需要绑定(bind)到某些 ListView
中的那个 RandomData
属性,并在基础模型的 RandomData
更改时更新它。
如果我这样做:
public class DataViewModel
{
private Data _data;
public DataViewModel(Data data)
{
_data = data;
RandomData = new ObservableCollection<String>(_data.RandomData);
}
public ObservableCollection<String> RandomData {get; set;}
}
然后我没有收到任何更新。 (我知道这只是复制列表,我只是用它来表达观点)。如果我在 RandomData
属性上使用 INotifyPropertyChanged,那么我只会收到分配给它的新列表的通知。我该如何检查内容的变化?执行此操作的首选方法是什么?
谢谢大家的建议
最佳答案
对于这个具体示例,我很想更改您的模型以使用 ObservableCollection
public class Data
{
public Data()
{
RandomData = new ObservableCollection<String>();
}
public ObservableCollection<String> RandomData {get; set;}
}
然后在您的 View 模型中将其公开为 ReadOnlyObservableCollection .请注意,ReadOnlyObservableCollection 是对原始 ObservableCollection 的包装。数据未被复制,原始集合的更改通知由 ReadOnlyObservableCollection 反射(reflect)。
public class DataViewModel
{
public DataViewModel(Data data)
{
RandomData = new ReadOnlyObservableCollection<String>(data.RandomData);
}
public ReadOnlyObservableCollection<String> RandomData {get; private set;}
}
当然,这是假设您希望 View 模型 RandomData 是只读的。
关于c# - 当模型中的列表更改时,ViewModel 中的 ObservableCollection 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15530770/