WPF将CommandParameter传递给操作方法RelayCommand

本文关键字:操作方法 RelayCommand CommandParameter WPF | 更新日期: 2023-09-27 18:00:26

我在通过XAML向操作方法传递参数时遇到问题。

这是我的XAML

    <Button 
        Name="btnOK"
        Content="OK" 
        HorizontalAlignment="left" 
        Margin="961,253,0,0" 
        VerticalAlignment="Top"  
        Width="67" 
        Command="{Binding CmdCloseWindow, Mode=OneWay}" 
        CommandParameter="{Binding ElementName=ItemWindow}"

这是我的C#RelayCommand代码

        CmdGetProductItem = new RelayCommand<object>(p => GetProductItem(), p => CanExecute());
        CmdUnCommpressedFiles = new RelayCommand<object>(p => GetUnCommpressFiles(), p => CanExecute());
        CmdDeCommpressedFiles = new RelayCommand<object>(p => DeCommpressingFiles(), p => CanExecute());
        //CmdSaveProductItemChanges = new RelayCommand(t => SaveChanges(), t=> CanExecute());
        //Error is here
        CmdCloseWindow = new RelayCommand<Window>(p => CloseWindow( *** Asking to put parameter in here **** ), p => CanExecute());

但我是从XAML中获取参数的,所以我不能在上面的签名中放入任何内容,其他帖子声明将其留空,但编译器抱怨道。

这是RelayCommand调用的方法。

    private void CloseWindow(Window window)
    {
        if (window != null)
        {
            window.Close();
        }
    }

如果有任何帮助,我将不胜感激。

WPF将CommandParameter传递给操作方法RelayCommand

感谢@dellywheel为我指明了正确的方向

基本上,relaycommand的lambda-所以在我的例子中(p)是object类型,因此,将其强制转换为Window对象(您传入的参数类型),它将在中工作

  CmdCloseWindow = new RelayCommand<Window>(p => CloseWindow((Window) p), p => CanExecute());

干杯