2012-07-10 113 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> 
相關問題