2009-07-27 3 views
3

У меня есть вложенные групповые группы, которые логически представляют вложенные структуры данных в моем приложении. Скажем, у меня есть структура, как это:Привязка свойства к другому свойству

Dev1 
- CDev1 
- CDev2 
    - ICDev1 
    - ICDev2 

У меня есть флажки, чтобы включить/отключить каждый из этих дэвов. Я хочу привязать флажки CheckState дочерних элементов к флажку CheckState родительского элемента. Я хочу, чтобы механизм работал следующим образом: Когда я проверяю CDev2, ICDev1 & ICDev2 автоматически проверяется. Но когда я отключу ICDev1, CDev2 останется в своем собственном состоянии. В принципе, я хочу, чтобы эти события распространялись на детей, но не на родителя, как на одностороннее связывание.

Я использую .Net 2.0 SP2. Я не знаю, возможно ли это или нет, поэтому я был бы рад, если бы вы показали мне некоторые указания об этом. Если это невозможно, я собираюсь реализовать обработчики событий для всех флажков.

ответ

5

Попробуйте это:

childCheckBox.DataBindings.Add("Checked", parentCheckBox, "Checked"); 

Вы также можете взглянуть на контроль TreeView, он имеет возможность отображать CheckBox рядом с каждым пунктом.

0

Это теоретически возможно с использованием двусторонней привязки в WPF (здесь tutorial on data binding in WPF). Я не думаю, что вы можете сделать это автоматически с помощью WinForms. Если вы используете WinForms, вам придется поймать и обработать события, чтобы вручную изменить изменения состояния этого типа.

0

Binding не решит вашу проблему. Если вы найдете способ привязать ICDev1 и ICDev2 к CDev2, это будет означать, что когда ICDev1 проверяется, оба ICDev1 и ICDev2 проверяются и наоборот. Если это то, что вам нужно, вам не нужны флажки для ICDev1, ICDev2, только для CDev2. Если вы хотите, чтобы пользователь был проверен ICDev1, но отключите ICDev2, вам нужно реализовать обработчики событий.

0

Это возможно в WPF, но я не думаю, что это возможно в WinForms, потому что нет никакого механизма события обновления свойства, как свойства зависимостей или INotifyPropertyChanged в WinForms

0

Посмотри here и link к Библиотека Truss от Kent Boogart, которая вообще обходит winforms. Это может потребовать некоторого подкласса, хотя, в зависимости от вашей модели, поскольку он работает аналогично привязке wpf.