[英]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.