如何使DatePicker控件更新视图模型而不会失去焦点?
我希望能够运行此示例,键入日期的12/9/11,单击窗口的关闭按钮并调试Debug.Assert.如果我在关闭窗口之前切换到文本框,它可以正常工作.
<Window x:Class="DatePickerTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Closing="MainWindow_OnClosing">
<StackPanel>
<DatePicker Name="TheDate" SelectedDate="{Binding Path=SelectedDate}" />
<TextBox/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
using System;
using System.ComponentModel;
using System.Diagnostics;
namespace DatePickerTest
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
private void MainWindow_OnClosing(object sender, CancelEventArgs e)
{
var dataContext = DataContext as ViewModel;
Debug.Assert(dataContext.SelectedDate == new DateTime(2011, 12, 9));
}
}
public class ViewModel
{
public DateTime SelectedDate { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
dev*_*tal 11
尝试更改UpdateSourceTrigger为PropertyChanged,例如
<DatePicker Name="TheDate"
SelectedDate="{Binding Path=SelectedDate
, UpdateSourceTrigger=PropertyChanged
, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)
更新
好吧,这好像这是一个已知的问题与DatePicker.您可以Text改为绑定到该属性,并设置TargetNullValue:
<DatePicker
Name="TheDate"
Text="{Binding Path=SelectedDate
, Mode=TwoWay
, UpdateSourceTrigger=PropertyChanged
, ValidatesOnDataErrors=True
, TargetNullValue=''}"
/>
Run Code Online (Sandbox Code Playgroud)