wpf MVVM ObservableCollection<string> 不更新 View

标签 wpf mvvm observablecollection

我有一个问题,我的 ObservableCollection 没有更新 View 。我可以在 OnPropertyChange 之前放置一个断点,并且可以验证我的集合中是否包含名称。

在我的模型中,我有一个事件会触发一个包含随机名称的列表。

在我的 View 模型中,我订阅了此事件,而我的事件处理程序执行此操作

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");
        }
    }

我的 View 绑定(bind)看起来像这样
<Window.DataContext>
    <vm:MainWindowViewModel/>
</Window.DataContext>
<Grid>
    <ListBox ItemsSource="{Binding Path=Names}"/>
</Grid>

如果我更改 <string> 的集合至<int>它似乎工作正常..我错过了什么?

最佳答案

如果您重新实例化 ObservableCollection,您将失去与集合的绑定(bind)。

您应该 .Clear(...) 和 .Add(...) 项目,您还应该将 ObservableCollection Names 更改为自动属性。无需在此处调用 OnPropertyChanged,因为它由您的类型处理。

关于wpf MVVM ObservableCollection<string> 不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999436/

相关文章:

WPF TouchEvents-捕获第一次触地得分

c# - 处置或终止 DispatcherTimer 对象和访问 DispatcherTimer 对象

web-services - Silverlight 中的 MVVM - 异步服务逻辑去哪里了?

.net - 将 TabControl ItemsSource 绑定(bind)到 ViewModels 的 ObservableCollection 会导致内容在焦点上刷新

c# - CollectionView 与 WPF(或类似的东西)

C# 测试堆栈.White : sometimes unable to find button

WPF 数据绑定(bind)和类型转换

wpf - 如何进行密码框验证?

c# - 对 ObservableCollection<T> 中的数据进行分组

wpf绑定(bind)到字符串