c# - 在代码隐藏中将参数传递给 RelayCommand

标签 c# wpf mvvm relaycommand

我知道 SOF 和 Google 上有多个标题相似的帖子,但请耐心等待一分钟。

我正在按照这篇文章为我的 gridview 创建上下文菜单:http://www.koaxkoaxkoax.com/ribbit/2010/09/creating-dynamic-menus-in-wpf.html

我在 UserControl.Resources 中创建了 HierarchicalDataTemplate ,我在 gridview 的资源中有一个空菜单,然后我在实际的上下文菜单中引用它。 XAML(gridview 的第一部分)如下所示:

        <DataGrid.Resources>
            <Views:ViewMenuItemCollection x:Key="Menu">
                <Views:ViewMenuItem Text="foo"/>
                <Views:ViewMenuItem Text="bar"/>
            </Views:ViewMenuItemCollection>
        </DataGrid.Resources>
        <DataGrid.ContextMenu>
            <ContextMenu ItemsSource="{DynamicResource Menu}"/>
        </DataGrid.ContextMenu>

在后面的代码中我使用 FindResource获取对菜单的引用并创建一个 ViewMenuItem -与foo处于同一级别的对象和 bar .然后我遍历一个列表并创建一个 ViewMenuItem - 每个列表项的对象并将它们附加为子对象。看起来就像我想要的那样。但我无法让实际功能发挥作用。

foreach 循环的内部部分(我创建子对象的地方)如下所示:

ViewMenuItem seriesItem = new ViewMenuItem();
seriesItem.Text = series.ForcedName;
seriesItem.Command = new RelayCommand<Series>(p=>_view.SetSeriesExecute(p));             
_setSeriesMenuItem.Children.Add(seriesItem);

特别是包含 p=>_view.SetSeriesExecute(p) 的行让我感到困惑。我发现了很多看起来完全一样的例子。当我运行我的程序并单击其中一个子元素时,SetSeriesExecute方法被正确调用 - 但参数始终为空。不足为奇,因为我实际上从未提供过 Series 类型的对象作为参数。我试过像这样在 RelayCommand 构造函数中提供参数:p=>_view.SetSeriesExecute(mySeriesObject) .它编译,但是 SetSeriesExecute永远不会被调用。

我的目标非常简单(至少我是这么认为的):当程序对上下文菜单中的元素单击使用react时,方法 ( SetSeriesExecute ) 需要知道实际选择了哪个项目 (=用户点击)。不幸的是,我无法弄清楚在哪里以及如何向 SetSeriesExecute 提供参数。 ,尽管进行了 4 小时的认真研究。事实上,其他人似乎都理解可用的示例并没有让我对自己感觉特别好,我对每一个提示都表示终生感激。

最佳 彼得

最佳答案

您缺少的是 CommandParameter

尝试将 seriesItem.CommandParameter 设置为您想要传递给 SetSeriesExecute 方法的任何内容。 p=>_view.SetSeriesExecute(mySeriesObject) 中的 p 将是该参数。

关于c# - 在代码隐藏中将参数传递给 RelayCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986561/

相关文章:

.net - WPF MenuItem ViewModel 命令

c# - 为什么 x = x + 100 与编译为相同 IL 的 x += 100 的处理方式不同?

c# - Expression.Convert() 对于 EF Core 中的日期时间数据类型无法正常工作

wpf - 在 wpf TextBox 中,我可以使字符串中超过一定长度的字符变为红色吗?

ListView 中的 WPF ListView

C# Entity Framework 未初始化数据库

c# - 像紧凑型框架中的控件一样的漫画气球?

c# - 使用 LINQ to SQL 记录更改

c# - WPF MVVM 代码背后的最佳实践

c# - 使用 MVVM 取消 WPF 中的组合框选择