【问题标题】:Modify an item of ObservableCollection修改 ObservableCollection 的一项
【发布时间】:2012-03-15 10:48:50
【问题描述】:

我已经向 ObservableCollection 添加了几个元素,现在我想修改其中一个,例如:

_MyCollection[num].Data1 = someText;

例如,根据下面的代码,意图是:_MyCollection[5].Type = changedText;

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

我该怎么做?

【问题讨论】:

标签: c# wpf observablecollection


【解决方案1】:

我猜你只是想看看变化对吧? 这与 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));
        }
    }
}

【讨论】:

  • 是的,但是相关代码是什么。是不是像:MyData[num].Type = changedText
【解决方案2】:

这将触发CollectionChanged 事件:

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

【讨论】:

  • true - 这也可以 - 但如果集合很大,当你只想更改项目的值时,绑定的 wpf-itemcontrol 将不得不做额外的工作 - 你不应该这样做
  • 是的,也许不是最好的解决方案;但是,如果您没有修改 MyData 类以实现 INotifyPropertyChanged 的选项,这将起作用。
猜你喜欢
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
相关资源
最近更新 更多