【发布时间】:2011-08-25 08:38:51
【问题描述】:
我的 ObservableCollection 没有更新视图时遇到问题。我可以在 OnPropertyChange 之前放置一个断点,并且可以验证我的集合中是否包含名称。
在我的模型中,我有一个事件会触发一个包含随机名称的列表。
在我的视图模型中,我订阅了这个事件,我的事件处理程序会这样做
void _manager_ProcessesChanged(List<string> n)
{
//create a new collection to hold current Ids
ObservableCollection<string> names = new ObservableCollection<string>();
//copy ids into our collection
foreach (string name in n)
{
names.Add(name);
}
Names = names;
}
我的 Names 属性看起来像这样
ObservableCollection<string> _names = new ObservableCollection<string>();
public ObservableCollection<string> Names
{
get { return _names; }
set
{
_names = value;
OnPropertyChanged("Names");
}
}
我的视图绑定看起来像这样
<Window.DataContext>
<vm:MainWindowViewModel/>
</Window.DataContext>
<Grid>
<ListBox ItemsSource="{Binding Path=Names}"/>
</Grid>
如果我将<string> 的集合更改为<int>,它似乎工作正常......我错过了什么?
【问题讨论】:
-
仅供参考,
_manager_ProcessesChanged可以简化为一行:Names = new ObservableCollection<string>(n); -
我这样做的原因是因为事件是从另一个线程触发的。这是我可以弄清楚如何解决跨线程问题的唯一方法
标签: wpf mvvm observablecollection