INotifyPropertyChanged не уведомляет пользовательский интерфейс - PullRequest
0 голосов
/ 28 марта 2012

Ну, у меня есть следующие определения классов:

    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)
        {
        }

Пользовательский интерфейс ничего не делает. Но загрузка файла снова решает это :) Все узлы являются наблюдаемой коллекцией Node

Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 28 марта 2012

INorifyPropertyChanged НИЧЕГО не имеет никакого отношения к шляпе - вы не изменяете свойство, вы перераспределяете его.

Таким образом, должен соблюдаться надлежащий вечер в ObservableCollection.Могу ли я предположить, что у вас либо нет заметного объединения, либо привязка списка не настроена должным образом.Ваше изменение свойства НИЧЕГО не делает, так как никакое свойство элемента не изменяется.

Каким-то образом ваши соперники не получают измененные события, которые выдает коллекция Nodes.Плохое связывание.

0 голосов
/ 28 марта 2012

Хм, прости, это моя вина.Бывает, что в Model свойства Children и Parent не были установлены как ObservableCollection. Снова извините за беспокойство!:)

...