C#Winforms-具有相同属性名称的数据绑定用于不同的控件

时间:2018-07-23 20:27:20

标签: c# winforms data-binding

我在Winforms应用程序中使用数据绑定将UI元素连接到基础对象。我的UI中有几个ComboBoxes,每个都与该类的不同属性有关。以下面的简化代码为例:

实现INotifyPropertyChange

的对象
class MyObject : INotifyPropertyChange
{
    // Custom logic in setters calls OnPropertyChanged
    public int Property1 { get; set; }
    public string Property2 { get; set; }
}

分配数据源

BindingSource MyDataSource = new BindingSource(this.components);
MyDataSource.Add(instanceOfMyObject);

创建绑定

Binding binding1 = new Binding("SelectedIndex", MyDataSource, "Property1",
                                false, DataSourceUpdateMode.OnPropertyChanged);
binding1.Format += FormatForBinding1();
comboBox1.DataBindings.Add(binding1);

Binding binding2 = new Binding("SelectedIndex", MyDataSource, "Property2"
                                false, DataSourceUpdateMode.OnPropertyChanged);
binding2.Format += FormatForBinding2();
comboBox2.DataBindings.Add(binding2);

我的问题是,当comboBox2.SelectedIndex更改时,两个Format处理函数都被调用,而当我只希望调用FormatForBinding2()时,这是不希望的。有办法解决吗?我对绑定有误解吗,尽管控件不同,但我不能拥有具有相同属性名称和相同数据源的多个绑定?

1 个答案:

答案 0 :(得分:0)

我认为问题在于在Format处理程序中执行的代码。 Format处理程序仅应用于执行其名称所暗示的操作-设置值的格式。我发现,添加额外的逻辑可能会导致不良行为。需要考虑的一件事是,与Format处理程序一起,还包括用于所需ComboBox的SelectedIndexChangedSelectedValueChanged处理程序,并在其中执行其他逻辑。