WPF MVVM:EventTrigger在CheckBox中不起作用

时间:2017-08-01 13:09:22

标签: c# wpf checkbox mvvm eventtrigger

我正在使用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时都没有输入。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

问题是,列表项的数据上下文属于FilterModel类型,但FilterCommand位于父视图模型中。

对命令尝试以下绑定:

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