我对mvvm比较新,但我有一个关于从viewmodel绑定的问题。 我有一个viewmodel,在其构造函数中我想填充一个observablecollection。 我的构造函数看起来像这样:
public StudySelectionViewModel() : base() {
_studyRepository = StudyRepository.Instance;
InitializeViewModelData();
}
InitializeViewModelData()如下所示:
private void InitializeViewModelData() {
_studyRepository.RetrieveModalityTypes();
RaisePropertyChanged("ModalityTypes");
}
我的属性ModalityTypes如下所示:
public ObservableCollection<ModalityType> ModalityTypes {
get {
return _studyRepository.ModalityTypes;
}
}
可能不用说我的存储库调用数据库并检索数据。 调试时,看起来RaisePropertyChanged的执行时间早于执行_studyRepository.RetrieveModalityTypes方法,因此它会绑定到空属性。
我在这里遗漏了什么吗?我的设计不好吗?有什么想法吗?
提前致谢,
答案 0 :(得分:1)
绑定将在表单初始化时检查属性。它还会在引发PropertyChanged
通知时检查该属性 - 因此您可以两次调用该属性的getter
我假设您获取数据的电话是网络服务电话或其他什么? Silverlight是异步的,因此您需要考虑在初始化表单后,Web服务调用可能会很好地返回
答案 1 :(得分:0)
这里有两件事要考虑。
如果您真的必须在数据服务数据就绪回调中用新集合替换集合,那么请确保编写集合设置器:
public ObservableCollection<ModalityType> ModalityTypes {
get {
return _studyRepository.ModalityTypes;
}
set
{
this.__studyRepository.ModalityTypes = value;
RaisePropertyChanged("ModalityTypes");
{
}