Существует ли простой способ реализовать привязку данных, когда ни один из обоих классов не имеет Управления типом?
В моем случае я хотел бы связать переменную со свойством пользовательского ToolStripButton.
РЕДАКТИРОВАНИЕ для разъяснения: при привязке с Управлением я могу использовать набор DataBindings Управления. Однако я ищу способ связать свойства независимо от входного и выходного Типа.
Править: использование winforms
Вероятно, это можно сделать с помощью Truss.
Truss предоставляет базу данных в стиле WPF для любого класса, реализующего INotifyPropertyChanged. Это дает немного больше гибкости, т.к. не ограничивает классы производными от определенного базового класса.
.Используйте свойства зависимостей (ваше свойство в ToolStripButton должно быть) и создайте свойство для вашей переменной в другом классе, а также создайте привязку и установите ее в свойство ToolstripButton.
Я думаю, что это самый простой способ сделать это.
EDIT: Это только для WPF...
Else implementation INotifyPropertyChanged и когда ваша переменная изменяется, она должна автоматически изменяться в ToolStripButton.
Для схожего поведения, такого как привязка элементов управления к свойствам объекта, для любого типа вы можете реализовать одинаковые интерфейсы.
Основываясь на этой мысли, вы можете использовать подкласс ToolStripButton ( или желаемый тип для привязки) и реализовать для него IBindableComponent
. Это работает для всех видов исходных и целевых типов до тех пор, пока они не запечатаны
. Например, ваша кнопка зачистки инструмента:
public class BindableToolStripButton : ToolStripButton, IBindableComponent {
//...
Это приведет к тому, что BindableToolStripButton будет иметь собственное свойство .DataBindings
, в то время как базовый класс ToolStripButton не имеет такого свойства.
Вам необходимо будет проследить за деталями реализации, используя примеры, рассмотренные здесь от Microsoft для ISite, IBindableComponent, IComponent и любых унаследованных интерфейсов.
Тогда вы добавите Привязывающие экземпляры к любому экземпляру BindableToolStripButton.
(Примечание: у меня есть только фрагменты, поэтому я сделаю свой первый пост в вики-сообществе - и посмотрим, как это пойдет... )
Я написал некоторые базовые вещи для базы данных через отражение. Она работает на любом объекте и не нуждается в реализации чего-то особенного (нет INotifyPropertyChanged, она просто работает), она часть моего редактора на http://github.com/filipkunc/opengl-editor-cocoa смотрите HotChocolate/Bindings (как повторная реализация Cocoa KVC, KVO в .NET) папку. Вы можете увидеть это в действии в проекте HotChocolateTest.
.