如何在修正绑定属性后立即更新TextBox?

时间:2010-08-11 08:31:16

标签: c# wpf data-binding xaml

我已经从TextBox绑定到Property了。如果用户将日期值写入TextBox,则应自动更正。 f.e。:20.01.10 - > 2010年1月20日

校正在propertys set-block中完成:

public String DateOfBirth
{
    get
    {
        if (patient.DateOfBirth != DateTime.MinValue)
          return patient.DateOfBirth.ToString("dd.MM.yyyy");
        else
          return patient.BirthdayString;
    }
    set
    {
        string dateParsed = ValidateDatePart(value, false, true);
        DateTime date = new DateTime();
        DateTime.TryParse(dateParsed, out date);

        patient.DateOfBirth = date;
        patient.BirthdayString = dateParsed;

        base.OnPropertyChanged("DateOfBirth");
    }
}

patient.DateOfBirthpatient.BirthdayString是我的应用程序的数据模型中的值。需要将生日作为字符串返回,因为用户应该能够输入生日的部分内容,例如。如果生日不完全像'12 .1967'那样。 我的问题是,如果用户输入类似'20 .01.10'的日期,则在属性中更正此日期,但更正日期('20 .01.2010')未设置为TextBox。 TextBox包含'20 .01'。 有没有人有想法,TextBox如何更新?默认情况下,绑定模式应为TwoWay。

这是TextBox的XAML:

<TextBox Validation.ErrorTemplate="{StaticResource errorTemplate}" Style="{StaticResource NotEmptyTextBox}">
    <Binding Path="OrderVM.Patient.DateOfBirth" ValidatesOnDataErrors="True" ValidatesOnExceptions="True" />
</TextBox>

2 个答案:

答案 0 :(得分:1)

这篇文章已经提供了答案:

Silverlight Two Way Data Binding on Key Up

编辑:抱歉,我误解了这个问题,我的新答案在下面

您将Textbox绑定到患者的DateOfBirth属性,而不是ViewModel中的DateOfBirth属性:

<Binding Path="OrderVM.Patient.DateOfBirth" ... 

需要

<Binding Path="OrderVM.DateOfBirth" ...

并为Binding IsAsync = true添加额外的权利,以否决可能忽略PropertyChanged事件

答案 1 :(得分:1)

只需尝试

Text =“{Binding Path = Name, UpdateSourceTrigger = PropertyChanged }”