Sil*_*lva 5 c# wpf xaml binding
我有一个关于绑定如何在 WPF 中工作的问题。
如果我有一个具有这样属性的视图模型:
private string testString;
public string TestString
{
get { return testString; }
set { testString = value; }
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我将它绑定到一个 xaml,如下所示:
<TextBlock
Text="{Binding Path=TestString, Mode=TwoWay}"
Foreground="Red"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Calibri"
FontSize="24"
FontWeight="Bold">
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
它有效......这里没有什么新东西。
但是,如果我从测试字符串中删除 getter 和 setter 并最终得到如下结果:
public string TestString;
Run Code Online (Sandbox Code Playgroud)
完全相同的绑定不起作用。我不知道为什么会发生这种情况,因为对我来说,它相当于具有自定义 get 和 set 的公共属性的公共属性。
有人可以为我解释一下这个主题吗?:)
提前TYVM!
PS:抱歉我的语法高亮。我只是不知道如何使用代码块。
@Silva,你的预感是正确的,幕后发生了一些事情。我只在 Pete Brown(Microsoft 开发人员传播者)博客上看到的一篇博客文章中清楚地解决了这个问题:
http://10rem.net/blog/2010/12/17/puff-the-magic-poco-binding-and-inotifypropertychanged-in-wpf
查看他写的有关课程的部分PropertyDescriptor。他还继续提到,与使用INotifyPropertyChanged在视图模型类上实现接口的更传统方法相比,它的效率相对较低,如下所示:
private string testString;
public string TestString
{
get { return testString; }
set {
if (testString != value) {
testString = value;
RaisePropertyChanged("TestString");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Run Code Online (Sandbox Code Playgroud)
我非常惊讶地发现,由于不实现该接口,性能下降了 4 倍。