【发布时间】:2014-06-13 20:40:43
【问题描述】:
我无法通过 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();
}
}
如有任何帮助,我将不胜感激。
【问题讨论】:
-
p 是 ItemWindow 那么为什么不能将其添加到签名 p => CloseWindow(p) 中?
-
我不知道 Lambda..谢谢你的知识!但是,它现在正在抱怨重载错误,所以我猜 p 不是 window 类型的?
-
取决于您的错误。放一个断点看看,如果仍然无法正常工作,请告诉我们
-
它仍然是预运行时,消息是“最佳重载匹配 有一些无效参数......但是,当我将鼠标悬停在 p 上时,它表明它是一个对象类型,而不是窗口类型,这样对吗?
-
很难说。您可以尝试将命令更改为 RelayCommand