Пока есть время, предваряю следующий вопрос и приведу реализованный пример идеи Partizan.
Этот класс имеет три свойства типа bool: State1, State2 и State3. Названия выбраны для примера и их кол-во тоже. На практике лучше дать другие, смысловые названия и их кол-во не ограничено.
Код | class UIAutomizer : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; void OnPropertyChanged(string propName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propName)); }
bool _state1; public bool State1 { get { return _state1; } set { if (_state1 == value) return; _state1 = value; // !!! эта важная строчка OnPropertyChanged("State1"); } }
bool _state2; public bool State2 { get { return _state2; } set { if (_state2 == value) return; _state2 = value; // !!! эта тоже важная строчка OnPropertyChanged("State2"); } }
bool _state3; public bool State3 { get { return _state3; } set { if (_state3 == value) return; _state3 = value; // !!! ну и эта само собой OnPropertyChanged("State3"); } } }
|
Для примера-проверки сделаем формочку и кинем на нее 8 кнопок и три CheckBox. Пропишем вот такой вот код:
Код | public partial class Form1 : Form { UIAutomizer uiAutomizer;
public Form1() { InitializeComponent();
uiAutomizer = new UIAutomizer();
// Привязываем некоторые контролы к свойству State1. button1.DataBindings.Add("Enabled", uiAutomizer, "State1"); button7.DataBindings.Add("Visible", uiAutomizer, "State1");
// а эти к свойству State2 button2.DataBindings.Add("Enabled", uiAutomizer, "State2"); button4.DataBindings.Add("Visible", uiAutomizer, "State2"); button5.DataBindings.Add("Enabled", uiAutomizer, "State2"); button8.DataBindings.Add("Enabled", uiAutomizer, "State2");
// эти к свойству State3 button3.DataBindings.Add("Enabled", uiAutomizer, "State3"); button6.DataBindings.Add("Visible", uiAutomizer, "State3"); }
private void checkBox1_CheckedChanged(object sender, EventArgs e) { // меняем свойство State1 автомайзера uiAutomizer.State1 = checkBox1.Checked; }
private void checkBox2_CheckedChanged(object sender, EventArgs e) { // меняем свойство State2 автомайзера uiAutomizer.State2 = checkBox2.Checked; }
private void checkBox3_CheckedChanged(object sender, EventArgs e) { // меняем свойство State3 автомайзера uiAutomizer.State3 = checkBox3.Checked; }
|
Вуаля! Привязывать можно любые свойства типа bool любых контролов (кнопки, пункты меню и т.д.). |