我将过滤选项绑定到视图中的属性(NB!不在视图模型中,我不希望在这种情况下从视图模型中使用它)。加价如下。
XAML
<DatePicker SelectedDate="{
Binding StartDate, RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
SelectedDateChanged="DatePicker_OnSelectedDateChanged" />
C#
public partial class ProgramWindow : Window
{
private ViewModel _viewModel { get; set; }
public DateTime StartDate { get; set; }
...
}
功能似乎正在起作用,因此当我设置字段的值时,过滤按预期执行 - 不管它是由日期选择器本身设置还是由代码中的任何其他设置。
但是,该字段的值似乎没有传播回控件,这看起来很混乱,因为显示中的日期是旧日期,但显示的记录显然与新日期相关。
我尝试将模式添加为 TwoWay ,但这没有任何区别。关于我做错了什么的建议?
<DatePicker SelectedDate="{
Binding StartDate, Mode=TwoWay, RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
SelectedDateChanged="DatePicker_OnSelectedDateChanged" />
答案 0 :(得分:2)
使属性成为DependencyProperty以通知UI更新:
public static readonly DependencyProperty StartDateProperty =
DependencyProperty.Register("StartDate", typeof(DateTime), typeof(ProgramWindow), new FrameworkPropertyMetadata(DateTime.MinValue),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string StartDate
{
get
{
return this.GetValue(StartDateProperty) as DateTime;
}
set
{
this.SetValue(StartDateProperty, value);
}
}
或在INotifyPropertyChanged
中实施ProgramWindow
并提升属性更改事件。