C# 将标签绑定到属性

C# 将标签绑定到属性,c#,data-binding,C#,Data Binding,我想将标签绑定到类的属性,并尝试了以下操作: public class Test { public string Name { get; set; } } Test test = new Test () { Name = "abc" }; label.DataBindings.Add ("Text", test, "Name"); 标签上显示“abc”。如果在数据绑定后更改Name属性,则标签不会反映新值。怎么了?我建议你用另一种方式装订 label.DataBindings.Add

我想将标签绑定到类的属性,并尝试了以下操作:

public class Test
{
    public string Name { get; set; }
}

Test test = new Test () { Name = "abc" };
label.DataBindings.Add ("Text", test, "Name");

标签上显示“abc”。如果在数据绑定后更改Name属性,则标签不会反映新值。怎么了?

我建议你用另一种方式装订

label.DataBindings.Add(new Binding("Text", test, "Name", false, DataSourceUpdateMode.OnPropertyChanged));
我希望这对你有用

另一种方法是更新类以使用值更改事件

class Test
{
    private string name;

    public string Name
    {
        get { return name; }
        set
        {
            //Check if you are assigning the same value
            if (Equals(name, value))
                return;
            name = value;
            OnNameChanged();
        }

        public event EventHandler NameChanged;

        protected virtual void OnNameChanged()
        {
            var handler = NameChanged;
            if (handler != null)
                handler(this, EventArgs.Empty);
        }
    }
}
以防第一个不起作用

最好的解决办法是用通用的方法

class Test : INotifyPropertyChanged
{
    private string name = "";

    public string Name
    {
        get { return name; }
        set { name = value; NotifyPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged()
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs("Name"));
        }
    }
}

尝试在属性中使用值更改事件,就像我在编辑中提到的那样。第一个解决方案也不起作用(我已经尝试过了)。第二种可能有效,但这比我为这样一个小问题编写的代码要多得多;-)第二个解决方案是可行的(除了您遇到的一个小语法错误),但我仍然希望有一个更优雅的解决方案。是的,您还可以在类中使用INotifyPropertyChanged。这是一个通用的接口。您的类必须实现INotifyPropertyChanged接口。关于INotifyPropertyChanged接口