C# winforms中的双向数据绑定,Inotifypropertychanged在基类中实现
我使用Winforms数据绑定,并且有派生类,其中基类实现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) {
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);