刷新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的创建并在将输出发布到接口之前执行测试。希望能帮助到你。