我遇到的问题是我的ObservableCollection没有更新视图。我可以在OnPropertyChange之前放置一个断点,并且可以验证我的集合中是否有名称。
在我的模型中,我有一个事件,它会触发一个带有随机名称的List。
在我的视图模型中,我订阅了此事件,我的事件处理程序执行此操作
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;
}
my 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>
,它似乎工作正常..我缺少什么?
答案 0 :(得分:5)
如果重新实例化ObservableCollection,您将失去对该集合的绑定。
您应该.Clear(...)和.Add(...)项目,您还应该只将ObservableCollection名称更改为自动属性。这里不需要调用OnPropertyChanged,因为它是由你的类型处理的。
答案 1 :(得分:2)
我也遇到过这种情况。不确定这是否是理想的解决方案(肯定不是这样)但这对我有用
void _manager_ProcessesChanged(List<string> n)
{
Names.Clear();
//copy ids into our collection
foreach (string name in n)
{
Names.Add(name);
}
}