Listview DataTemplate中的CheckBox命令

时间:2019-06-02 01:45:13

标签: listview checkbox datatemplate

我的CheckBox命令不起作用。我想在选中或取消选中SelectedItem时将ListView的SelectedItem传递给命令,但是命令根本不执行。我也怀疑我的CommandParameter配置不正确吗?

我非常确定问题是因为CheckBox位于ListView DataTemplate中。

有人可以告诉我如何设置吗?我尝试遵循发现的示例,但似乎无济于事。谢谢。

<ListView x:Name="lvReferralSource" ItemsSource="{Binding ReferralSourceTypeObsCollection}" Style="{StaticResource TypeListViewStyle}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical">
                                    <CheckBox x:Name="ckbReferralIsChecked" Content="{Binding Value}" IsChecked="{Binding Active}" Style="{StaticResource CheckBoxStyleBase2}"
                                              Command="{Binding CheckBoxIsChecked}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}, Path=SelectedItem}">
                                    </CheckBox>
                                </StackPanel>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>



private ICommand _CheckBoxIsChecked;
public ICommand CheckBoxIsChecked
    {
        get
        {
            if (_CheckBoxIsChecked == null)
            {
                _CheckBoxIsChecked = new RelayCommand<object>(ExecuteCheckBoxIsChecked, CanExecuteCheckBoxIsChecked);
            }

            return _CheckBoxIsChecked;
        }
    }
    public bool CanExecuteCheckBoxIsChecked(object parameter)
    {
        return true;
    }
    public void ExecuteCheckBoxIsChecked(object parameter)
    {
        Mouse.OverrideCursor = Cursors.Wait;

         if (parameter != null)
        {
            //Do Stuff...
        }

        Mouse.OverrideCursor = Cursors.Hand;
    }

1 个答案:

答案 0 :(得分:1)

只要CheckBoxIsChecked属性属于定义了ValueActive属性的数据对象,就应该执行命令。

如果它属于视图模型,则可以使用RelativeSource绑定到它:

<CheckBox x:Name="ckbReferralIsChecked" Content="{Binding Value}" IsChecked="{Binding Active}"
            Style="{StaticResource CheckBoxStyleBase2}"
            Command="{Binding DataContext.CheckBoxIsChecked, RelativeSource={RelativeSource AncestorType=ListView}}" 
            CommandParameter="{Binding}">