来自自定义属性的WPF数据绑定不更新

时间:2015-11-18 07:44:18

标签: c# wpf mvvm data-binding

我是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属性?重新运行应用程序时会应用更新。

非常感谢

4 个答案:

答案 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
     }
}

它会告诉您的模型所有属性都已更新。

MSDN:

  

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>

感谢您的帮助。