将控件作为CommandParameter与Binding一起传递为空

本文关键字:一起 Binding 控件 CommandParameter | 更新日期: 2023-09-27 18:07:36

我已经写了一个自定义的ICommand实现,它是可用的静态属性:

public class GridViewCommands
{
    public GridViewCommands()
    {
    }
    /// <summary>
    /// Toggle Selection-Command
    /// </summary>
    public static ICommand ToggleSelection
    {
        get
        {
            return new GridViewToggleSelectionCommand();
        }
    }
}

我尝试将这个属性绑定到一个简单的Button-Command

<ui:GridViewControl x:Name="gridView" Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
<Button HorizontalAlignment="Left" Width="100" Margin="220,0,0,0" Content="Toggle" x:Name="toggleButton" Command="{x:Static  ui:GridViewCommands.ToggleSelection}" CommandParameter="{Binding ElementName=gridView}"></Button>

但是如果我启动我的应用程序,GridViewToggleSelectionCommandCanExecute方法中的parameter -参数始终为空。我的目的是传递一个GridViewControl的实例作为命令参数。

我在这里做错了什么:ui:GridViewCommands.ToggleSelection}" CommandParameter="{Binding ElementName=gridView"} ?

编辑

绑定不会抛出任何异常。

非常感谢!

将控件作为CommandParameter与Binding一起传递为空

我觉得你想这么做:

public static ICommand ToggleSelection { get { return new RelayCommand<GridViewControl>(GridViewToggleSelectionCommand); } }
private static void GridViewToggleSelectionCommand(GridViewControl theControl)
{
    // do something with the control here
}

我看到你把这个标记为mvvm…这不是mvvm。视图模型不应该知道视图的任何信息。我也不明白为什么你把ToggleSelection设置为静态,这意味着你的命令处理程序也必须是静态的。

老实说,如果你继续走你现在走的路,你会让自己陷入一个痛苦的世界。你的GridViewControl应该绑定到视图模型中的一个对象,你应该通过iccommand处理程序将这个对象传递回视图模型。

你实际上可以在点击按钮时获得参数