C# INotifyPropertyChanged不会通知用户界面

C# INotifyPropertyChanged不会通知用户界面,c#,.net,wpf,mvvm,inotifypropertychanged,C#,.net,Wpf,Mvvm,Inotifypropertychanged,我有以下的类定义: private ObservableCollection<Node> _Nodes; public ObservableCollection<Node> Nodes { get { return _Nodes; } set { _Nodes = value; OnProperty

我有以下的类定义:

    private ObservableCollection<Node> _Nodes;
    public ObservableCollection<Node> Nodes
    {
        get
        {
            return _Nodes;
        }
        set
        {
            _Nodes = value;
            OnPropertyChanged("Nodes");
        }
    }
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)
        {
        }
试试看
{
foreach(所有节点中的var节点)
{
if(node.Children.Contains)
{
for(int i=0;i
UI碰巧什么也不做。但再次加载文件可以解决此问题:) AllNodes是
节点


有什么方法可以做到这一点吗?

INorifyPropertyChanged与hat无关-您不需要更改属性,只需要重新调整其速度

因此,必须观察可观测收集中的适当均衡。我建议您要么没有可观察的集合,要么列表绑定未正确设置。属性更改与此无关,因为元素上没有任何属性更改


不知何故,您的VIE没有得到Nodes集合抛出的chang事件。装订不好。

嗯,对不起,是我的错。在模型中,
子项
父项
属性未设置为
可观察集合
。再次抱歉打扰您:)

由于您正在修改节点的
.Children
,因此我们还需要有关此成员的一些信息。。
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)
        {
        }