【发布时间】:2018-01-08 09:04:53
【问题描述】:
我正在使用 MVVM 样式的 WPF 构建应用程序。当我选中或取消选中多个 CheckBox 进行过滤时,我正在尝试对我的 DataGrid 进行过滤。
我找到了 Interaction.Triggers 的解决方案,但在这种情况下它对我不起作用。
这是我的代码:
<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>
除了FilterCommand,一切都很好。我的 C# 代码中有这个:
public DelegateCommand<object> FilterCommand { get; set; }
...
FilterCommand = new DelegateCommand<object>(Filter);
Filter(object obj) 是一个函数,但是当我选中或取消选中我的任何 CheckBox 时,它没有被输入。
任何帮助将不胜感激。
【问题讨论】:
-
为什么不用
IsChecked的setter调用Filter? -
调试的时候看看输出窗口,有没有绑定错误?
-
哦,是的,我有:System.Windows.Data 错误:40:
BindingExpression path error: 'FilterCommand' property not found on 'object' ''FilterModel' (HashCode=57774494)'. BindingExpression:Path=FilterCommand; DataItem='FilterModel' (HashCode=57774494); target element is 'InvokeCommandAction' (HashCode=8505800); target property is 'Command' (type 'ICommand') -
@JanDotNet 我在与
Filter方法不同的文件中有一个对象FilterModel。它不能是静态的。有没有其他方法可以调用它? -
但是
FilterCommand和IsChecked属性在同一个类中,不是吗?
标签: c# wpf checkbox mvvm eventtrigger