2012-07-10 142 views
0

在班里的ScheduleViewModel“我有以下特性:视图模型内绑定到对象的属性WPF

private ReminderFilter filter; 
public ReminderFilter Filter 
{ 
get { return filter; } 
set 
{ 
    filter = value; 
    NotifyPropertyChanged("Filter"); 
} 
} 

我想要做的是绑定到这个对象的属性,而无需暴露它们在视图模型中。我试过以下XAML没有成功:

<CheckBox IsChecked="{Binding Filter.Complete, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Content="Show Completed"></CheckBox> 

有什么建议吗?

+0

只是一个简单的问题,'ReminderFilter'是否也实现了'INotifyPropertyChanged'?因为(afaik)'Filter.Complete'绑定应该工作。 – 2012-07-10 18:53:07

+0

你检查了数据绑定错误吗?您是否初始化了该房产? – 2012-07-10 18:59:05

+0

我刚刚更改了ReminderFilter以实现INotifyPropertyChanged,但在更改CheckBoxes IsChecked之后,甚至没有调用Complete集。我可能做错了什么? – 2012-07-10 19:04:08

回答

1

我认为你需要双向绑定。 Oneway只会更新视图。如果您选中该复选框,则该值不会向下传播回该对象。

+0

我将模式更改为双向模式,但仍不会调用Complete属性的集合。 – 2012-07-10 19:22:47

+0

检查输出控制台中的数据绑定错误。该复选框可能没有此视图模型的datacontext。 – Josh 2012-07-10 19:26:15

+0

我检查了复选框的datacontext,并且设置正确。 – 2012-07-10 19:33:24

0

如果你想避免暴露视图模型中的属性,你将不得不在ReminderFilter模型中实现INotifyPropertyChanged。

Similar SO Discussion on Get Notified when model properties change

我知道你说的视图模型,你宁愿不公开财产,但如果你是对模型中的执行INotifyPropertyChanged的:

private ReminderFilter filter; 
    public bool FilterComplete 
    { 
     get 
     { 
      return filter.Complete; 
     } 
     set 
     { 
      if (value == filter.Complete) 
       return; 
      filter.Complete = value; 
      NotifyPropertyChanged("FilterComplete"); 
     } 
    } 

XAML:

<CheckBox IsChecked="{Binding FilterComplete}" Content="Show Completed"></CheckBox> 
相关问题