C# winforms中的双向数据绑定,Inotifypropertychanged在基类中实现

C# winforms中的双向数据绑定,Inotifypropertychanged在基类中实现,c#,winforms,data-binding,C#,Winforms,Data Binding,我使用Winforms数据绑定,并且有派生类,其中基类实现IPropertychanged: public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string propertyName) { var handler = this.PropertyChanged; if (handler != null) {

我使用Winforms数据绑定,并且有派生类,其中基类实现
IPropertychanged

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName) {
        var handler = this.PropertyChanged;
        if (handler != null) {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
每个propertysetter调用:

    protected void SetField<T>(ref T field, T value, string propertyName) {
        if (!EqualityComparer<T>.Default.Equals(field, value)) {
            field = value;
            IsDirty = true;
            this.RaisePropertyChanged(propertyName);
        }
    }
属性绑定到文本框的方式

        private DerivedEntity derivedEntity
        TextBoxDerivedEntity.DataBindings.Add("Text", derivedEntity, "Probenname");

如果以编程方式将文本指定给文本框,则文本框不会显示文本。但是我可以手动编辑文本框。

绑定源在文本框验证事件中更新。当用户编辑TextBox并将焦点更改为其他控件时,将调用TextBox验证事件。 由于以编程方式更改TextBox文本,TextBox不知道文本已更改,因此不会调用验证,也不会更新绑定,因此需要手动更新绑定

初始化绑定:

var entity;
textBox.DataBindings.Add("textBoxProperty", entity, "entityProperty");
更改文本框。文本:

textBox.Text = "SOME_VALUE";
手动更新绑定:

textBox.DataBindings["textBoxProperty"].WriteValue();
Binding.WriteValue()从控件读取值并相应地更新实体。
您可以在上阅读有关WriteValue的内容。

我知道现在回答这个问题已经太迟了,但是这个问题是可以解决的,如果您在绑定应该更改值时设置事件,如果您在属性值更改事件上设置事件,您的问题将得到解决。你可以这样做

textBox.DataBindings.Add("textBoxProperty", entity, "entityProperty", true, DataSourceUpdateMode.OnPropertyChanged);

订阅服务器未初始化。i、 e

private DerivedEntity derivedEntity
TextBoxDerivedEntity.DataBindings.Add("Text", derivedEntity, "Probenname");
derivedEntity
为空

初始化它就可以了。

我实现了“INotifyPropertyChanged”,但只有当新值与旧值不同时才会引发PropertyChanged事件:

public class ProfileModel : INotifyPropertyChanged
{
    private Guid _iD;
    private string _name;
    public event PropertyChangedEventHandler PropertyChanged;

    public Guid ID
    {
        get => _iD;
        set
        {
            if (_iD != value)
            {
                _iD = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ID"));
            }
        }
    }

    public string Name
    {
        get => _name;
        set
        {
            if (_name != value)
            {
                _name = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name"));
            }
        }
    }
}
现在只需绑定到控件:

txtProfileID.DataBindings.Clear();
txtProfileID.DataBindings.Add("Text", boundProfile, "ID", true, DataSourceUpdateMode.OnPropertyChanged);

Winforms数据绑定,我从来没有听说过,但我肯定是初学者:)你能为textbox双向数据绑定发布一个小的工作代码吗。仅仅看你的小代码无法想象如何实现它?请参考这个问题。谢谢你的回答。我如何绑定其他控件,如复选框、单选按钮和下拉列表等。我想绑定这些控件,当数据源中的数据发生更改时,更改应该反映在控件级别。你能帮我写一些示例代码吗,比如如何用数据绑定这些控件
复选框、单选按钮和下拉列表等
你可以绑定复选框和单选控件的值属性。像这样,checkBox.DataBindings.Add(“Value”,entity,“entityProperty”,true,DataSourceUpdateMode.OnPropertyChanged);如果您有数据绑定的combobox,您可以像这样绑定combobox的SelectedItem checkBox.DataBindings.Add(“SelectedItem”,entity,“entityProperty”,true,DataSourceUpdateMode.OnPropertyChanged)。
txtProfileID.DataBindings.Clear();
txtProfileID.DataBindings.Add("Text", boundProfile, "ID", true, DataSourceUpdateMode.OnPropertyChanged);