在多个控件上使用数据绑定

Noc*_*ceo 1 c# data-binding winforms

我有一个CheckBox我想以某种形式控制Enabled所有属性的属性。TextBoxes我想这样做,使用DataBinding. 有没有一种方法可以创建一个DataBinding可用于TextBox表单中的每个内容的单个?

// Creating the binding for the checkbox
Binding bindDisableFormFields = new Binding("Checked", viewModel, "DisableFormFields");

 // Create the binding for the textboxes
Binding bindIsFormEnabled = new Binding("Enabled", viewModel, "IsFormEnabled");

// Add the binding to the checkbox. This works as intended
myForm.DisableFormCheckBox.DataBindings.Add(bindDisableFormFields);

// Add bindings and textboxes. After adding the binding 
// to the first textbox, the code will fail at runtime. So obviously
// this is not a useful approach.    
myForm.TextBox1.DataBindings.Add(bindIsFormEnabled);
myForm.TextBox2.DataBindings.Add(bindIsFormEnabled);  // This line will fail
myForm.TextBox3.DataBindings.Add(bindIsFormEnabled);
myForm.TextBox4.DataBindings.Add(bindIsFormEnabled);
myForm.TextBox5.DataBindings.Add(bindIsFormEnabled);
Run Code Online (Sandbox Code Playgroud)

Rom*_*mbé 5

为什么不分别创建一个新的绑定呢?:

myForm.TextBox1.DataBindings.Add(new Binding("Enabled", viewModel, "IsFormEnabled"));
myForm.TextBox2.DataBindings.Add(new Binding("Enabled", viewModel, "IsFormEnabled"));
myForm.TextBox3.DataBindings.Add(new Binding("Enabled", viewModel, "IsFormEnabled"));
myForm.TextBox4.DataBindings.Add(new Binding("Enabled", viewModel, "IsFormEnabled"));
myForm.TextBox5.DataBindings.Add(new Binding("Enabled", viewModel, "IsFormEnabled"));
Run Code Online (Sandbox Code Playgroud)

或者用更优雅的方法:

List<TextBox> textBoxes = new List<TextBox>() { myForm.TextBox1, myForm.TextBox2, myForm.TextBox3, myForm.TextBox4, myForm.TextBox5 };

textBoxes.ForEach(t => t.DataBindings.Add(new Binding("Enabled", viewModel, "IsFormEnabled")));
Run Code Online (Sandbox Code Playgroud)