当类的属性发生变化时,如何让UI做出反应?

本文关键字:UI 属性 变化 | 更新日期: 2023-09-27 18:03:40

例如,我有这样一个小类:

public class SednaTreeViewItem
{
    public string ValueMember { get; set; }
    public string DisplayMember { get; set; }
    public SednaTreeViewItem(string valueMember, string displayMember)
    {
        ValueMember = valueMember;
        DisplayMember = displayMember;
    }
}

然后我在用户控件中使用它:

/// <summary>
/// SednaTreeViewItem that is currently selected in the SednaTreeView.
/// </summary>
public SednaTreeViewItem SelectedItem
{
    get 
    {
        if (ultraTree.SelectedNodes.Count > 0)
        {
            var node = ultraTree.SelectedNodes[0];
            return treeNodes.FirstOrDefault(x => x.ValueMember == node.Key);
        }
        else
            return null;                
    }
    set 
    {
        if (value != null)
        {
            ultraTree.ActiveNode = ultraTree.Nodes[value.ValueMember];
            ultraTree.Select();
        }                
    }
}

然后在使用这个用户控件的实际表单中,我想捕获每当文本框中的。text被更改时,在用户控件中也有该文本被更改,这是一个树视图

private void txtInvestor_TextChanged(object sender, EventArgs e)
{
    treeViewInvestors.SelectedItem.DisplayMember = txtInvestor.Text;
}

问题是,当我改变。displaymember的值时,没有任何东西可以让treeview知道何时更新节点的显示文本。

你对如何实现这个有什么建议吗?

当类的属性发生变化时,如何让UI做出反应?

使用控件绑定:

this.txtInvestor.DataBindings.Add("Text", this, "SelectedItem", false, DataSourceUpdateMode.OnPropertyChanged);

你应该为你的类属性创建一个事件,然后在你的UI类中注册这个事件。

以下链接中公认的答案应该可以帮助你:

c#:基于GET/SET属性为类创建事件