1

如何刷新以下内容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[,]

最简单的方法是什么?

任何帮助,将不胜感激。

4

2 回答 2

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 对象上实现这一点也将允许您在任何级别更改对象,并将其冒泡到界面。

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

Properties = new ObservableCollection<ServerProperties>(propertiesList);

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

于 2013-04-10T00:06:25.017 回答
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 方法。

于 2013-04-09T23:54:14.423 回答