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();
}
}
如果有任何帮助,我将不胜感激。
感谢@dellywheel为我指明了正确的方向
基本上,relaycommand的lambda-所以在我的例子中(p)是object类型,因此,将其强制转换为Window对象(您传入的参数类型),它将在中工作
CmdCloseWindow = new RelayCommand<Window>(p => CloseWindow((Window) p), p => CanExecute());
干杯