刷新ObservableCollection(覆盖)

问题描述:

如何刷新以下ObservableCollection刷新ObservableCollection(覆盖)

public class ViewModelProperties 
{ 
    private ObservableCollection<ServerProperties> properties; 

    public ObservableCollection<ServerProperties> Properties 
    { 
     get 
     { 
      properties = new ObservableCollection<ServerProperties>(); 

      for (var lineNumber = 0; lineNumber < MainWindow.lineCount; lineNumber++) 
      { 
       if (MainWindow.textProperties[lineNumber, 0] == null) break; 

       properties.Add(new ServerProperties(MainWindow.textProperties[lineNumber, 0], 
                MainWindow.textProperties[lineNumber, 1])); 
      } 

      return properties; 
     } 
    } 
} 

public class ServerProperties 
{ 
    private string property; 
    private string value; 

    public ServerProperties() 
    { 
    } 

    public ServerProperties(string property, string value) 
    { 
     Property = property; 
     Value = value; 
    } 

    public string Property 
    { 
     get 
     { 
      return this.property; 
     } 
     set 
     { 
      this.property = value; 
     } 
    } 

    public string Value 
    { 
     get 
     { 
      return this.value; 
     } 
     set 
     { 
      this.value = value; 
     } 
    } 

    public override string ToString() 
    { 
     return string.Format("[Property : {0}]", Value); 
    } 
} 

我改变了textProperties[,]的价值,现在我想覆盖集合的以前的内容与textProperties[,]当前内容。

这样做最简单的方法是什么?

任何帮助,将不胜感激。

例如,简单的解决方案可能是

public class ViewModelProperties 
{ 
    private ObservableCollection<ServerProperties> properties = new ObservableCollection<ServerProperties>(); 

    public ObservableCollection<ServerProperties> Properties 
    { 
     get 
     { 
      return properties; 
     } 
    } 

    public void SetProperties() 
    { 
     properties.Clear(); 
     for (var lineNumber = 0; lineNumber < MainWindow.lineCount; lineNumber++) 
     { 
      if (MainWindow.textProperties[lineNumber, 0] == null) break; 

      properties.Add(new ServerProperties(MainWindow.textProperties[lineNumber, 0], 
               MainWindow.textProperties[lineNumber, 1])); 
     } 

    } 
} 

要添加新项目OC,只需调用setProperties方法的任何时间。

从您的ViewModel以及ServerProperties对象中实现INotifyPropertyChanged开始。通过这种方式,您可以引发PropetyChanged事件,该事件将传递回用户界面。

视图模型

public class ViewModelProperties : INotifyPropertyChanged { 

public event ProeprtyChangedEventHandler PropertyChanged; 

private ObservableCollection<ServerProperties> properties = new ObservableCollection<ServerProperties>(); 

public ObservableCollection<ServerProperties> Properties { 
    get { return properties;} 
    set { 
     properties = value; 
     this.RaisePropertyChangedEvent("Properties"); 
    } 
} 

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

实现这个就ServerProperties对象,以及将允许您更改的对象,在任何级别,并将它泡到接口。

最后查看你的人口代码,并为了成功更新属性首先将其填充到列表中,然后使用列表重新初始化ObservableCollection。

Properties = new ObservableCollection<ServerProperties>(propertiesList); 

这也允许您更好地处理ObservableCollection的创建并在将输出发布到接口之前执行测试。希望能帮助到你。