UpdateSourceTrigger=PropertyChanged 仅适用于页面上的第一个 DatePicker

本文关键字:第一个 DatePicker PropertyChanged 适用于 UpdateSourceTrigger | 更新日期: 2023-09-27 18:34:13

属性 我正在使用WPF和MVVM,并且有两个DatePicker,如下所示。该UpdateSourceTrigger=PropertyChanged仅适用于第一个,当我更改第二个中的日期时,绑定到它的数据不会更改。

<DatePicker Grid.Column="1" Height="25" Validation.ErrorTemplate="{x:Null}" Text="{Binding UDC.StartDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:dd/MM/yyyy}}" HorizontalAlignment="Left" Margin="22,90,0,0" Name="dtStartDate" VerticalAlignment="Top" Width="120" />
<DatePicker Grid.Column="1" Height="25" Validation.ErrorTemplate="{x:Null}" Text="{Binding UDC.EndDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:dd/MM/yyyy}}" HorizontalAlignment="Left" Margin="22,130,0,0" Name="dtEndDate" VerticalAlignment="Top" Width="120" />

我搜索了一个解决方案,但没有得到如何解决这个问题的任何结果。

UDC 是像这样的实体的对象

UDC
{
public int ID { get; set; }
public String Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}

所有其他绑定都可以完美地工作,只是 EndDate 不会从视图中返回任何值。

UpdateSourceTrigger=PropertyChanged 仅适用于页面上的第一个 DatePicker

你需要让 UDD 实现 INotifyPropertyChanged。然后,您需要更改 Start 和 EndDate 的 setter 来调用 OnPropertyChanged。

另一件事是,在 XAML 中,它是 UDC,但在 C# 中,它是 UDD。我不知道这是帖子中的错字,还是代码。

其实我自己找到了答案。问题是我绑定了日期选择器的 Text 属性而不是 SelectedDate。当我将我的 Xaml 文件更改为此文件时,一切正常。

<DatePicker Validation.ErrorTemplate="{x:Null}" Grid.Column="1" Height="25" SelectedDate="{Binding UDC.StartDate,ValidatesOnDataErrors=False, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:dd/MM/yyyy}}" HorizontalAlignment="Left" Margin="22,48,0,0" Name="dtStartDate" VerticalAlignment="Top" Width="120" />
<DatePicker Validation.ErrorTemplate="{x:Null}" Grid.Column="1" Height="25" SelectedDate="{Binding UDC.EndDate,ValidatesOnDataErrors=False, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:dd/MM/yyyy}}" HorizontalAlignment="Left" Margin="22,85,0,0" Name="dtEndDate" VerticalAlignment="Top" Width="120" />