繁体   English   中英

使用MVVM Light绑定到ObservableCollection

[英]Binding to ObservableCollection with MVVM Light

我有一个MainViewModel ,其中包含对ObservableCollection的引用:

public ObservableCollection<SomeClass> ListOfPeople
{
    get
    {
        return MyClass.BaseCollection;
    }
}

BaseCollection还是ObservableCollection<SomeClass>的实例。 ListOfPeople绑定到第二页上的ListBox控件-应用程序从第一页开始,启动下载过程以填充BaseCollection ,并在下载仍在进行时切换到第二页。

问题在于,发生绑定时, BaseCollection为null,因此不会填充ListBox 但是,即使下载过程完成,ListBox仍然保持为空。 我以为这是因为BaseCollection没有将有关集合的现有更改的适当实例通知给我,但我不确定。

BaseCollection里面有项目-我确认了。

关于如何解决此问题的任何建议? 有人像我上面显示的那样通过MVVM Light绑定到ObservableCollection吗?

如果您不想在构造函数中实例化一个空的ListOfPeople并将此实例用于数据库加载,则必须执行以下操作:

完成ListOfPeople加载后,您的MainViewModel必须调用RaisePropertyChanged("ListOfPeople"); 告诉视图数据已更改。

背景:感谢ObservableCollection MyClass.BaseCollection.Add()更新了gui。 一旦MyClass.BaseCollection = new Obser...被调用,就不再进行gui的更新,因为gui拥有对MyClass.BaseCollection的旧内容的引用。 mvvm-light-RaisePropertyChanged()告诉gui更新对新集合的引用

我尚未在MVVM Light上工作,所以对不起我是否缺少某些特定的东西。

看你的实现,

public ObservableCollection<SomeClass> ListOfPeople
{
    get
    {
        return MyClass.BaseCollection;
    }
}

该代码应该起作用,并且绑定到该源的控件应该获得适当的属性更新,而不必考虑创建observable实例的实际源。

因此,这里唯一可能的问题可能是MyBase.BaseCollection在开始时为null。 因此,如果避免这种情况,并在声明此可观察项的地方创建一个空集合,然后按原样触发下载过程,则一切应该正常进行。

希望这会有所帮助。

暂无
暂无

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

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