XAML绑定自动实现的属性?

时间:2011-03-24 05:27:42

标签: silverlight xaml

是否可以将XAML数据绑定到具有自动实现属性的模型?

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


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

4 个答案:

答案 0 :(得分:3)

自动属性没有半自动模式。它需要是一个没有额外的自动财产:

int Width { get; set; }

或具有后备存储的完全展开的属性,可以添加其他代码,例如更改通知:

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

如果您使用自动属性,您仍然可以绑定它们,但是您放弃了更改通知,因此您从代码对属性所做的任何更改都不会显示在UI中。通常,用于数据绑定的任何对象都应包含更改通知,因此不应使用自动属性。

答案 1 :(得分:2)

我用这种方式解释Autoproperty。

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

始终可以单向绑定到视图。

Twoway绑定仅在您希望一个modell元素中的更改导致gui或其他观察者自动更新时才需要NotifyPropertyChange("propertyname");

有一个工具可以为您自动生成INotifyPropertyChange实现:notifypropertyweaver

更新

使用免费的lib code-magazine article "INotifyPropertyChanged Is Obsolete"

updatecontrols on codeplex中描述的双向绑定还有一个INotifyPropertyChange-Free替代。

答案 2 :(得分:0)

您的示例不是自动实现的属性,实际上它可能无法编译。

要实现这一点,您需要实现完整的后备存储属性或使用方面来实现INotifyPropertyChanged,以便您可以保持Auto属性清洁。

答案 3 :(得分:0)

是的,您可以将xaml绑定与自动属性配合使用。但如上所述,所示的财产不是自动财产。