来自自定义属性的WPF数据绑定未更新
本文关键字:数据绑定 更新 WPF 自定义属性 | 更新日期: 2023-09-27 18:22:17
我是WPF数据绑定的新手,不知道如何从我的视图模型更新属性
我有一个名为Patient 的班级
public string FirstName { get; set; } = "";
public string MiddleName { get; set; } = "";
public string LastName { get; set; } = "";
患者类别的更新正在中工作
private Data.Patient patient;
public Data.Patient Patient
{
get { return patient; }
set
{
patient = value;
NotifyPropertyChanged("Patient");
}
}
我的视图模型上的属性,该属性未由患者类别更新
public string FullName
{
get { return Patient.LastName + " " + Patient.FirstName + " " + Patient.MiddleName; }
}
我正在尝试更新TextBlock Text属性
<TextBlock Text="{Binding FullName}" FontSize="14.667" />
如何将Class的更新应用到我的FullName属性?当我重新运行应用程序时,会应用更新。
非常感谢
您的问题是没有通知UI Fullname
属性已更改。从技术上讲,它没有改变,但它依赖于其他一些特性。
这里最简单的解决方案是为所有属性引发NotifyProperty事件。您不必为其编写大量代码,只需在NotifyPropertyChanged();
中传递null
即可
private Data.Patient patient;
public Data.Patient Patient
{
get { return patient; }
set
{
patient = value;
NotifyPropertyChanged(null); //informs view that all properties updated
}
}
它将告诉您的模型所有属性都已更新。
MSDN:
PropertyChanged事件可以指示对象上的所有属性已通过使用null或String.Empty作为属性名称进行了更改在PropertyChangedEventArgs中。
将绑定从Text="{Binding FullName}"
更改为应触发PropertyChanged事件的Text="{Binding FullName, Mode="OneWay", UpdateSourceTrigger="PropertyChanged"}"
。
与带有NotifyPropertyChanged(...)
的Patient
属性一样,当属性Fullname发生更改时,您必须通知。为此,在三个属性的setter中调用NotifyPropertyChanged("FullName")
:FirstName、MiddleName和LastName。
还要考虑,NotifyPropertyChanged可能为null,因此使用:
if (NotifyPropertyChanged != null)
NotifyPropertyChanged("FullName");
我似乎无法让它工作。我将该属性添加到了我的类中,因此对该类的任何更改都会通知UI,但它仍然没有按我想要的方式工作。但我找到了解决办法。
<TextBlock FontSize="14.667">
<TextBlock.Text>
<MultiBinding StringFormat=" {0} {1} {2}">
<Binding Path="Patient.LastName" />
<Binding Path="Patient.FirstName"/>
<Binding Path="Patient.MiddleName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
谢谢你的帮助。