Я действительно влюбляюсь в целую схему привязки Net. ... но, по-видимому, все еще есть пара исправлений. Предположим, что мой класс имеет переменную-член типа double с именем Susan
. Ну, кажется, нет никакого непосредственного способа связать Susan
в текстовое поле SusanText
потому, что вяжущие выглядит что-то вроде этогоC# привязка переменных класса
SusanText.DataBindings.Add("Text",datasource,"Property")
И Susan
не свойство. Поэтому я могу сделать Susan
общедоступной собственностью, но этот вид воняет ... что, если я хочу сохранить Susan
скрытым? (Я думаю, я мог бы сделать Susan
публичным свойством частного экземпляра некоторого внутреннего класса ... но это большая работа для небольшого двойника.) Однако у меня есть большая проблема, поэтому, ради аргумента давайте сделайте следующее:
private double Susan_;
public double Susan{ get; set;}
...
SusanText.DataBindings.Add("Text",this,"Susan")
Затем все первоначально работает как ожидалось. Если я изменяю SusanText
, то изменяется Susan
. Однако проблема возникает, когда я напрямую меняю Susan
. Я бы хотел, чтобы для SusanText
было автоматически обновлено. Поэтому я подозреваю, что мне нужно сделать Susan
подкласс double, который реализует какой-то интерфейс IBindable, так что если Susan
привязывается к SusanText
, то соответствующие события зарегистрированы, а Susan
уведомит других, если она будет изменена.
Что является самым простым способом сделать Susan
делать то, что я хочу, чтобы она сделала?
Спасибо!
«вы не можете использовать автоматически реализованы свойства» хорошо, вы можете, вы просто должны стрелять INPC после установки недвижимость. Кажется немного странным, но иногда это полезный шаблон, например, когда вы хотите обновить несколько свойств как часть псевдо транзакции. – Will
@Will, вы можете - но иметь потребительский класс (B) вызывать метод класса databound (A), чтобы (A) поднять событие, пахнет запахом. События в .NET являются специальными делегатами в том, что они только когда-либо предназначены для увольнения из класса - требуя, чтобы внешние компоненты запускали событие, просят людей забыть. ИМО лучше сделать дополнительную работу и сделать класс данных, способный поднимать собственные события. – STW
@stw просто вариант, просто вариант. В любом случае я все использую DependencyObjects. Упростите более связанные свойства, которые у вас есть. – Will