【问题标题】:INotifyPropertyChanged does not notify UIINotifyPropertyChanged 不通知 UI
【发布时间】:2012-04-11 20:25:09
【问题描述】:

嗯,我有以下类定义:

    private ObservableCollection<Node> _Nodes;
    public ObservableCollection<Node> Nodes
    {
        get
        {
            return _Nodes;
        }
        set
        {
            _Nodes = value;
            OnPropertyChanged("Nodes");
        }
    }

Node类:

[Serializable]
public class Node : INotifyPropertyChanged
{        
    private string _Name;
    [XmlAttribute("Name")]
    public string Name
    {
        get
        {
            return _Name;
        }
        set
        {
            _Name = value;
            OnPropertyChanged("Name");
        }
    }


    private bool _IsChecked;
    [XmlIgnore()]
    public bool IsChecked
    {
        get
        {
            return _IsChecked;
        }
        set
        {
            _IsChecked = value;
            OnPropertyChanged("IsChecked");
        }
    }

当在ViewModel 中我修改了一个元素:

try
        {
            foreach (var node in AllNodes)
            {
                if (node.Children.Contains(s))
                {
                    for (int i = 0; i < node.Children.Count; i++)
                    {
                        if (node.Children[i] == s)
                        {
                            node.Children[i] = null;
                        }
                    }
                }
            }
        }
        catch (NullReferenceException)
        {
        }

UI 碰巧什么也不做。但是再次加载文件可以解决它:) AllNodes 是 Node 的 ObservablCollection

有没有办法做到这一点?

【问题讨论】:

  • 因为你正在修改一个节点的.Children,我们还需要一些关于这个成员的信息..

标签: c# .net wpf mvvm inotifypropertychanged


【解决方案1】:

嗯,对不起,是我的错。碰巧在模型中,ChildrenParent 属性没有设置为ObservableCollection。再次,抱歉打扰! :)

【讨论】:

    【解决方案2】:

    INorifyPropertyChanged 与 hat 没有任何关系 - 您不更改属性,而是更改它。

    因此,必须观察 ObservableCollection 中的正确事件。我可以建议您要么没有可观察的集合,要么没有正确设置列表绑定。您的属性更改无关紧要,因为没有更改元素上的属性。

    不知何故,你的 vie 没有得到 Nodes 集合抛出的 chang 事件。绑定错误。

    【讨论】:

      猜你喜欢
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2011-12-20
      • 2016-07-30
      相关资源
      最近更新 更多