繁体   English   中英

绑定问题构造函数viewmodel

[英]Binding Issue constructor viewmodel

我对mvvm比较陌生,但是我对从视图模型进行绑定存在疑问。 我有一个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方法执行得更早,因此它绑定到一个空属性。

我在这里想念什么吗? 我的设计不好吗? 有任何想法吗?

提前致谢,

表单初始化时,绑定将检查属性。 当引发PropertyChanged通知时,它还将检查属性-因此您可能会两次调用该属性的getter

我假设您获取数据的电话是网络服务电话还是其他电话? Silverlight是异步的,因此您需要考虑初始化表单后,Web服务调用可能会返回

这里有两件事要考虑。

  1. 您有一个ObservableCollection-它是可观察的,因此,如果在初始化视图模型时初始化集合,则在数据服务返回视图时,将集合添加到集合中而不是用新集合替换它会很好。
  2. 如果确实必须在数据服务数据就绪回调中用新集合替换集合,那么请确保您这样编写集合设置器:

     public ObservableCollection<ModalityType> ModalityTypes { get { return _studyRepository.ModalityTypes; } set { this.__studyRepository.ModalityTypes = value; RaisePropertyChanged("ModalityTypes"); { 

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM