2017-08-01 1200 views
0

我正在MVVM風格的WPF構建應用程序。我試圖在我的DataGrid上進行篩選,當選中或取消選中多個CheckBox進行篩選時。WPF MVVM:事件觸發器不工作CheckBox

我找到了解決方案Interaction.Triggers,但在這種情況下它不適用於我。

這裏是我的代碼:除了FilterCommand

<ListBox 
      ItemsSource="{Binding PortsFilterSource}" 
      Background="LightGray" 
      BorderThickness="0" 
      Grid.Column="1"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox 
         Content="{Binding Name}" 
         IsChecked="{Binding IsChecked}"> 

         <i:Interaction.Triggers> 
          <i:EventTrigger EventName="Unchecked"> 
           <i:InvokeCommandAction Command="{Binding FilterCommand}"/> 
          </i:EventTrigger> 
          <i:EventTrigger EventName="Checked"> 
           <i:InvokeCommandAction Command="{Binding FilterCommand}"/> 
          </i:EventTrigger> 
         </i:Interaction.Triggers> 
        </CheckBox> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

一切是偉大的工作。我有這個在我的C#代碼:

public DelegateCommand<object> FilterCommand { get; set; } 
... 
FilterCommand = new DelegateCommand<object>(Filter); 

Filter(object obj)是一個函數,但是當我選中或取消選中我的任何複選框它沒有進入。

任何幫助將不勝感激。

+0

爲什麼不使用'IsChecked'的setter方法調用'Filter'? – JanDotNet

+2

調試時看看輸出窗口,你有沒有綁定錯誤? – ajg

+0

哦,是的,我有:System.Windows.Data錯誤:40:'BindingExpression路徑錯誤:'FilterCommand'屬性找不到'對象'''FilterModel'(HashCode = 57774494)'。 BindingExpression:路徑= FilterCommand; DataItem ='FilterModel'(HashCode = 57774494);目標元素是'InvokeCommandAction'(HashCode = 8505800);目標屬性是'命令'(類型'ICommand')' – francosy

回答

3

問題是,列表項的數據上下文類型爲FilterModel,但FilterCommand位於父視圖模型中。

請嘗試以下的命令綁定:

{Binding DataContext.FilterCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}} 
+1

你是我的英雄人!非常感謝,它的工作! – francosy