【问题标题】:Howto immediately update TextBox after correction of bound property?如何在更正绑定属性后立即更新 TextBox?
【发布时间】:2017-02-10 22:41:53
【问题描述】:

我已经将一个文本框绑定到一个属性。如果用户将日期值写入文本框,则应自动更正。例如:20.01.10 -> 20.01.2010

在属性设置块中进行更正:

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 是我的应用程序数据模型中的值。需要将生日作为字符串返回,因为用户应该能够输入生日的一部分,例如 f.e.如果生日不是像'12.1967'那样完全知道。 我的问题是,如果用户输入像“20.01.10”这样的日期,则会在属性中更正该日期,但更正的日期(“20.01.2010”)未设置为文本框。文本框仍包含“20.01”。 有人知道如何更新 TextBox 吗?绑定模式默认为 TwoWay。

这是 TextBox 的 XAML:

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

【问题讨论】:

    标签: c# wpf data-binding xaml


    【解决方案1】:

    试试看

    Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}"

    【讨论】:

    • 是的,每次按键都会触发,应该对你有用。
    【解决方案2】:

    这篇文章已经给出了答案:

    Silverlight Two Way Data Binding on Key Up

    编辑:对不起,我误解了这个问题,我的新答案如下

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

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

    需要

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

    并向 Binding IsAsync=true 添加一个额外的属性,以否决 PropertyChanged 事件可能被忽略

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多