XAML-привязка к автоматически реализованным свойствам? - PullRequest
1 голос
/ 24 марта 2011

Возможно ли использовать привязку данных XAML к модели с автоматически внедряемыми свойствами?

class ClassA
{
  // pseudo code.
  int Width { get; set{ NotifyPropertyChange("Width");} }
}


//XAML
<textBox width="{Binding Path=Width,Mode=OneWay}"/>

Ответы [ 4 ]

3 голосов
/ 24 марта 2011

Авто-свойства не имеют полуавтоматического режима.Это должно быть либо автоматическое свойство, в котором нет ничего лишнего:

int Width { get; set; }

, либо полностью расширенное свойство с резервным хранилищем, в которое можно добавить дополнительный код, например уведомление об изменении:

int _width;
int Width
{
  get { return _width; }
  set
  {
    _width = value;
    NotifyPropertyChange("Width");
  }
}

Если вы используете авто-свойства, вы все равно можете связываться с ними, но вы отказываетесь от уведомления об изменениях, поэтому любые изменения, внесенные в свойство из кода, не будут отображаться в пользовательском интерфейсе.В общем, любой объект, используемый для привязки данных, должен включать уведомление об изменении и поэтому не должен использовать авто-свойства.

2 голосов
/ 24 марта 2011

Я интерпретирую таким образом Autoproperty.

class ClassA
{
  int Width { get; set;}
}

Да всегда возможна односторонняя привязка к просмотру.

Привязка Twoway требует NotifyPropertyChange("propertyname");, только если вы хотите, чтобы изменения в одном элементе modell вызывали автоматическое обновление графического интерфейса пользователя или других наблюдателей.

Существует инструмент, который может автоматически генерировать реализацию INotifyPropertyChange для вас: notifypropertyweaver .

Обновление

Существует также альтернатива INotifyPropertyChange-Free для двухстороннего связывания, описанная в статье в журнале кода "INotifyPropertyChanged Is устаревший" с использованием бесплатных lib updatecontrols для codeplex

0 голосов
/ 24 марта 2011

Да, вы можете использовать привязку xaml с автоматическими свойствами.Но, как сказано, проиллюстрированное свойство не является свойством Auto.

0 голосов
/ 24 марта 2011

Ваш пример не является автоматически реализованным свойством, фактически он, вероятно, не будет компилироваться.

Для реализации этого вам потребуется либо реализовать свойство полного резервного хранилища, либо использовать аспекты для реализации INotifyPropertyChanged, поэтомучто вы можете содержать вашу собственность в чистоте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...