我是WPF数据绑定的新手,无法想象如何从我的viewmodel更新属性
我有一个名为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");
}
}
我的viewmodel上的某个属性未被患者类更新
public string FullName
{
get { return Patient.LastName + " " + Patient.FirstName + " " + Patient.MiddleName; }
}
我正在尝试更新TextBlock Text属性
<TextBlock Text="{Binding FullName}" FontSize="14.667" />
如何将类中的更新应用到我的FullName属性?重新运行应用程序时会应用更新。
非常感谢
答案 0 :(得分:1)
您的问题是您没有通知用户Fullname
属性已更改。从技术上讲,它没有改变,但它依赖于其他一些财产。
这里最简单的解决方案是为所有属性引发NotifyProperty事件。您不必为此编写大量代码,只需在null
NotifyPropertyChanged();
即可
private Data.Patient patient;
public Data.Patient Patient
{
get { return patient; }
set
{
patient = value;
NotifyPropertyChanged(null); //informs view that all properties updated
}
}
它会告诉您的模型所有属性都已更新。
PropertyChanged事件可以指示对象上的所有属性 已使用null或String.Empty作为属性名称进行更改 在PropertyChangedEventArgs。
答案 1 :(得分:0)
将绑定从Text="{Binding FullName}"
更改为Text="{Binding FullName, Mode="OneWay", UpdateSourceTrigger="PropertyChanged"}"
,以触发PropertyChanged-Event。
答案 2 :(得分:0)
与Patient
的{{1}}属性一样,当属性Fullname发生更改时,您必须通知。为此,请在三个属性的setter中调用NotifyPropertyChanged(...)
:FirstName,MiddleName和LastName。
还要考虑NotifyPropertyChanged可以为null并因此使用:
NotifyPropertyChanged("FullName")
答案 3 :(得分:0)
我似乎无法使其发挥作用。我将该属性添加到了我的类中,因此对该类的任何更改都将通知用户界面,但它仍然没有按照我想要的方式工作。 但我找到了解决方案。
<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>
感谢您的帮助。