是否可以将XAML数据绑定到具有自动实现属性的模型?
class ClassA
{
// pseudo code.
int Width { get; set{ NotifyPropertyChange("Width");} }
}
//XAML
<textBox width="{Binding Path=Width,Mode=OneWay}"/>
答案 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绑定与自动属性配合使用。但如上所述,所示的财产不是自动财产。