2010-04-01 87 views
1

我很茫然,爲什麼這不起作用考慮到我從工作代碼中得到它,只是增加了一個新的代碼級別,但這裏是什麼我有。基本上,當我將ViewModel綁定到一個列表時,綁定會在項目添加到集合時啓動。但是,如果綁定的項目發生更新,則不會更新。基本上,我有一個ObservableCollection,它包含一個帶有字符串值的自定義類。當該字符串值得到更新時,我需要它來更新列表。Silverlight綁定 - 綁定時添加項目,但沒有得到更新

現在,當我調試時,列表項不會正確更新,但UI不反映更改。如果我將綁定項目設置爲一個成員變量並將其歸零,然後將其重置爲正確的集合,它將起作用,但不是期望的行爲。

這是一個代碼模型,希望有人能告訴我我錯在哪裏。此外,我已經嘗試在下面的代碼中的每個級別實施INofityPropertyChanged。

public class Class1 
{ 
    public string ItemName; 
} 

public class Class2 
{ 
    private Class2 _items; 

    private Class2() //Singleton 
    { 
      _items = new ObservableCollection<Class1>(); 
    } 

    public ObservableCollection<Class1> Items 
    { 
      get { return _items; } 
      internal set 
      { 
       _items = value; 
      } 
    } 
} 

public class Class3 
{ 

    private Class2 _Class2Instnace; 

    private Class3() 
    { 
      _Class2Instnace = Class2.Instance; 
    } 

    public ObservableCollection<Class1> Items2 
    { 
      get {return _Class2Instnace.Items; } 
    } 
} 

public class MyViewModel : INofityPropertyChanged 
{ 
    private Class3 _myClass3; 

    private MyViewModel() 
    { 
      _myClass3 = new Class3(); 
    } 

    private BindingItems 
    { 
      get { return _myClass3.Items2; } // Binds when adding items but not when a Class1.ItemName gets updated. 
    } 
} 
+0

我可以在這裏看到一個Singleton模式的嘗試,但實際發佈的代碼有點搞砸了。沒有'Class2'的靜態實例,也沒有靜態'Instance'屬性。並不是說它與你的問題無關。 – AnthonyWJones 2010-04-01 15:53:39

+0

是的,單身人士的作品,我只是不覺得打字全部出來。如果我說這是一個單身人士,你會假設代碼的其餘部分在那裏。我認爲這與這個問題沒有任何關係。 – 2010-04-01 16:06:21

+0

@dw:爲了將來的參考,通常最好是發佈簡短但完整的代碼,或者明確包含評論,說明缺少實現細節。如果問題不太明顯,可能會分散注意力,難以找到正確的答案。 – AnthonyWJones 2010-04-01 16:33:49

回答

2

回答你的問題是,Class1需要實現INotifyPropertyChanged

public class Class1 : INotifyPropertyChanged 
{ 
    private string _ItemName; 
    public string ItemName 
    { 
     get { return _ItemName; } 
     set 
     { 
     _ItemName = value; 
     NotifyPropertyChanged("ItemName"); 
     } 
    } 

    private void NotifyPropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(name)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

} 
+0

試過並說明了「另外,我已經嘗試在下面的代碼中的每個級別實施INofityPropertyChanged。」任何其他想法? – 2010-04-01 16:00:08

+0

回想起來,我以爲我做了,但要重試,以確保。 – 2010-04-01 16:06:50

+0

就是這樣......謝謝你成爲我的第二隻眼睛,通過所有的代碼工作讓我忽略了這一點。謝謝! – 2010-04-01 16:17:10

相關問題