我正在使用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时都没有输入。
非常感谢任何帮助。
答案 0 :(得分:3)
问题是,列表项的数据上下文属于FilterModel
类型,但FilterCommand
位于父视图模型中。
对命令尝试以下绑定:
{Binding DataContext.FilterCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}