修改

2012-03-15 68 views
3

我已經添加幾個元件到一個ObservableCollection的ObservableCollection的項目,現在我想要修改他們中的一個,如:修改

_MyCollection[num].Data1 = someText; 

作爲一個例子,根據下面的代碼,意圖是:_MyCollection[5].Type = changedText;

_MyCollection.Add(new MyData 
{ 
    Boundary = Text1, 
    Type = Text2, 
    Option = Text3 
}); 

我該怎麼做?

+0

類似的問題:http://stackoverflow.com/questions/800091/how-do-i-update-an-existing-element-of -an-observablecollection – Robar 2012-03-15 10:54:12

+0

「_MyCollection [5] .Type = changedText;'?」有什麼問題?這應該工作得很好,除非'MyData'是一個結構。 – 2012-03-15 10:58:05

回答

5

我想你只是想看到變化的權利? 這與ObservableCollection無關,但與您的MyData對象無關。 它必須執行INotifyPropertyChange - 如果你這樣做,你會看到你所做的改變。

public class MyData : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private string type; 
    public string Type 
    { 
     get { return type; } 
     set 
     { 
     if (value != type) 
     { 
      type = value; 
      NotifyPropertyChanged("Type"); 
     } 
     } 
    } 

    // ... more properties 

    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 
+0

是的,但相關的代碼是什麼。它是這樣的:'MyData [num] .Type = changedText'? – Shibli 2012-03-15 10:54:38

+0

不再像'_MyCollection [num] .Type = changedText;' – Carsten 2012-03-15 10:58:52

1

這將觸發一個事件CollectionChanged

MyData temp = _MyCollection[index]; 
temp.Type = changedText; 
_MyCollection.SetItem(index, temp); 
+0

我認爲這不是一個好主意...... – 2012-03-15 10:58:53

+0

是真的 - 這也會起作用 - 但是如果集合很大,當您只想更改項目的值時,綁定的wpf-itemcontrol將不得不做額外的工作 - 你不應該這樣做 – Carsten 2012-03-15 11:00:38

+0

是的,也許不是最好的解決方案;但是,如果您沒有修改「MyData」類來實現'INotifyPropertyChanged'的選項,這將起作用。 – 2012-03-15 11:09:23