我希望用户能够输入例如310312并自动将datepicker的text属性更新为31/03/12;我已将datepicker绑定到视图模型'Date'属性,如下所示。
使用WPF4.0,绑定现在会自动执行一组get(不需要INotifyPropertyChanged);这发生在下面的代码中,但是'get'日期字段值是正确的'31 / 03/12',datepicker文本属性没有更新,并保持在310312(NB UpdateSourceTrigger = PropertyChanged)。
textbox属性确实发生了变化(例如,设置代码,未显示,转换为大写)
我真的很感激为什么会这样做。
<Grid>
<DatePicker Text="{Binding Path=Date,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Height="25" HorizontalAlignment="Left" Name="datePicker1"/>
<TextBox Text="{Binding Path=State,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="23" HorizontalAlignment="Left" Name="textBox1" />
</Grid>
private string date;
public string Date
{
get
{
return date;
}
set
{
if (value != null)
{
Regex abbreviatedDateFormat = new Regex(@"\A\d{6}\Z");
if (abbreviatedDateFormat.IsMatch(value))
{
value = value.Insert(2, "/");
value = value.Insert(5, "/");
}
}
date = value;
}
}
答案 0 :(得分:0)
这不是一个明确的答案,但我想发布代码并将其格式化,所以我把它放在这里。
这引起了我的兴趣所以我一直在玩一个简单的测试项目。这是我的代码:
<强> MainWindow.xaml 强>
<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" x:Name="Me">
<StackPanel>
<DatePicker Name="datePicker" Text="{Binding ElementName=Me, Path=Date, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="{Binding ElementName=datePicker, Path=Text}"/>
<TextBlock Text="{Binding ElementName=datePicker, Path=SelectedDate}"/>
<TextBlock Text="{Binding ElementName=Me, Path=Date}"/>
</StackPanel>
</Window>
<强> MainWindow.xaml.cs 强>
public partial class MainWindow : Window
{
public MainWindow()
{
Date = "030912";
InitializeComponent();
}
private string date;
public string Date
{
get { return date; }
set
{
if (value != null)
{
Regex abbreviatedDateFormat = new Regex(@"\A\d{6}\Z");
if (abbreviatedDateFormat.IsMatch(value))
{
value = value.Insert(2, "/");
value = value.Insert(5, "/");
}
}
date = value;
}
}
}
我注意到DateTime控件的输入如果没有用'/'字符分隔,则不理解日期格式。我将Text属性绑定到像你一样的TextBlock,我可以看到它按字符更新TextBlock,并且当正则表达式匹配时它会斜线,但实际的输入框值不会更新(无论UpdateSourceTrigger),直到提供有效日期为止然后按下回车键。在我看来,这可能是控制的理想行为。
我知道控件的格式与当前Thread的文化信息有关,但是按照此链接http://social.msdn.microsoft.com/Forums/en/wpf/thread/f065bcda-a5df-4fd1-bd29-3d0186245c8c,我仍然无法找到适合您的解决方案。