2012-03-28 68 views
0

嗯,我有下面的類定義:INotifyPropertyChanged的不通知UI

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

用戶界面恰好無所作爲。但再次加載文件解決了它:) AllNodes是一個ObservationblCollection Node

有沒有辦法做到這一點?

+2

由於您正在修改'.Children'節點,我們還需要一些關於此成員的信息。 – 2012-03-28 09:01:23

回答

1

INorifyPropertyChanged與帽子沒什麼關係 - 您不會更改屬性,而是將其重新分配。

因此,必須遵守ObservableCollection中的適當eveng。我可以建議你要麼沒有可觀察的魅力,要麼列表綁定沒有正確設置。由於沒有更改元素的屬性,因此您的屬性更改無權執行。

不知怎麼的,你的結局並沒有得到Nodes集合正在拋出的chang事件。糟糕的綁定。

+0

Tnx dude :)我糾正自己。 – Bip 2012-03-28 09:05:59

0

恩,對不起,這是我的錯。恰巧在模型中,ChildrenParent屬性沒有設置爲ObservableCollection。再次,抱歉讓人不安! :)