模式二不适用于相对来源

时间:2015-08-11 19:21:03

标签: c# wpf xaml mvvm data-binding

我将过滤选项绑定到视图中的属性(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" />

1 个答案:

答案 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并提升属性更改事件。