如何刷新以下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[,]
覆盖集合的先前内容。
最简单的方法是什么?
任何帮助都将不胜感激。
答案 0 :(得分:2)
首先在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对象上实现它也可以让你在任何级别更改对象,并让它冒泡到界面。
最后查看您的填充代码,为了让属性更新成功,首先将其填充到List,然后使用List重新初始化ObservableCollection。
Properties = new ObservableCollection<ServerProperties>(propertiesList);
这也允许您在将输出发布到接口之前更好地处理ObservableCollection的创建并执行测试。希望它有所帮助。
答案 1 :(得分:1)
例如,一个更简单的解决方案可能是
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方法。