使用 MVVM 上下文菜单项命令绑定 WPF

2023-11-21

我知道这个问题已经在许多网站和 StackOverFlow 中以不同的方式被问过很多次,但我找到的所有答案都没有帮助我,准确地说,我无法理解它们并在我的应用程序中实现。所以我想从我的应用程序中添加一些代码,以便你们可以更好地帮助我。

问题陈述:我正在使用 WPF DataGrid。我添加了一个上下文菜单我有 3 个选项剪切、复制、粘贴。我正在使用 MVVM 进行开发。我想将这些选项数据绑定到我的 ViewModel 中的命令。但我却无法做到同样的事情。上下文菜单选项根本没有绑定数据!

这是我的 XAML 网格代码:

<custom:DataGrid  
      x:Name="DataGrid_Standard"   
      Grid.Row="1" Grid.Column="1"   
      AutoGenerateColumns="False"                                                           
      IsSynchronizedWithCurrentItem="True"   
      Background="Transparent"
      ItemsSource="{Binding FullGridData}" 
      ItemContainerStyle="{StaticResource defaultRowStyle}"
      ColumnHeaderStyle="{StaticResource DefaultColumnHeaderStyle}"                         
      Grid.ColumnSpan="2">

然后我有一个 ContextMenu 和一个标题元素的样式

<ContextMenu x:Key="columnHeaderMenu">
   <MenuItem Command="{Binding CutCommand}"
             Header="Test" />
   <MenuItem Header="Copy"/>
   <MenuItem Header="Paste"/>
</ContextMenu>
<Style TargetType="{x:Type custom:DataGridColumnHeader}" x:Key="DefaultColumnHeaderStyle">
    <Setter Property="ContextMenu" Value="{DynamicResource columnHeaderMenu}" >
</Style>

这行代码出现在我的构造函数中

public Window1()
{            
   this.DataContext = new AppData();
}

此代码位于我的 AppData 类中:

public class AppData  
{ 
    private IList<GridData> fullGridData = new ObservableCollection<GridData>();<br> 
    public IList<GridData> FullGridData
    {
        get { return fullGridData; }
        set { fullGridData = value; }
    }

    private DelegateCommand<object> cutCommand;
    public DelegateCommand<object> CutCommand
    {
        get
        {
            if (cutCommand == null)
            {
                cutCommand = new DelegateCommand<object>(CutColumn);
            }
            return cutCommand;
        }
    }

    private void CutColumn(object obj)
    {
        //some code goes here
    }   
}

** 我想知道我到底哪里做错了?为什么数据绑定没有发生? 请帮助我解决这个问题。请向我提供示例代码或对我当前代码的修改,我可以从中实现它。 **


您的代码(或当时使用的 WPF 版本(?))中的某些内容过于复杂。我能够绑定诸如

<DataGrid AutoGenerateColumns="True"
        Name="myGrid"
        ItemsSource="{Binding Orders}">
    <DataGrid.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Copy" Command="{Binding CopyItem}" />
            <MenuItem Header="Delete" Command="{Binding DeleteItem}" />
        </ContextMenu>
    </DataGrid.ContextMenu>
</DataGrid>

命令设置如下:

VM.DeleteItem 
     = new OperationCommand((o) => MessageBox.Show("Delete Me"),
                            (o) => (myGrid.SelectedItem as Order)?.InProgress == false );

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MVVM 上下文菜单项命令绑定 WPF 的相关文章

  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 如何使用DocumentViewer显示流程文档?

    我的资源中有一个简单的流程文档 FlowDocument1 xaml
  • 有没有基于 WPF 的 Markdown 渲染器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们有基于 WPF 的应用程序 我们有单独的字符串存储库 其中的文本在网络中进行编辑 在我们的 WPF
  • 使用 BlockingCollection 更新 ObservableCollection

    我订阅了一项服务 当收到新元素时 该服务将引发一个事件 我将此元素添加到BlockingCollection 我有第二个线程正在运行 它将循环BlockingCollection添加 更新可观察集合中的元素 问题是你如何添加Observab
  • 不支持 URI 前缀

    我正在尝试使用以下方法加载和播放波形文件 SoundPlayer simpleSound new SoundPlayer pack application MyAssembly component Sounds 10meters wav s
  • WPF 模式进度窗口

    如果这个问题已经被回答了很多次 我很抱歉 但我似乎找不到适合我的答案 我想创建一个模式窗口 在我的应用程序执行长时间运行的任务时显示各种进度消息 这些任务在单独的线程上运行 我能够在过程的不同阶段更新进度窗口上的文本 跨线程通信一切正常 问
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 如何从WPF中的另一个窗口调用方法

    我有两个窗户win1用于显示用户列表和其他win2用于添加用户 我还有一种在删除 更新或添加用户后刷新网格的方法 这个方法是在win1 我如何调用这个方法win2添加用户后 这是一个非常基本的面向对象设计问题 所以您希望能够从win2到一个
  • 将 MahApps 图标与 ContextMenu 结合使用

    我正在使用 MahApps Metro UI 工具包编写 WPF 应用程序 http mahapps com guides quick start html http mahapps com guides quick start html
  • Windows 8 Windows 应用商店应用程序中的中继命令

    由于 CommandManager 在 win8 Metro 应用程序中不可用 是否有 RelayCommand 的版本 有一个版本here https xp dev com svn mytoolkit Shared MVVM RelayC
  • 如何使用 MVVM 打开和关闭新 Windows?

    对于 MVVM 和 WPF 什么是处理打开和关闭新窗口和对话框的好 直接方法 打开和关闭应该由 ViewModel 驱动 对吗 但 ViewModel 不应该知道视图 我通常为此使用接口 例如 如果我想在单独的窗口中编辑记录 我有一个接口
  • 增加 WPF 弹出动画的持续时间

    我有一个 WPF PopUp 控件 用于显示菜单叠加层 并且使用默认的淡入淡出动画 不过我想让动画需要更长的时间才能完成 我可以在 XAML 中做到这一点吗 你能在这里发布相关的xaml代码吗 否则 您可以查看这些链接以开始使用 xaml
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 在哪里可以找到 WPF 应用程序中 UI 的一些主题/演示?

    我想使用 xaml 中的 Visual Studio Designer 设计一个现代外观的 UI 它为我提供了一个很好的工具箱 我可以使用它通过拖放来直观地创建 UI 由于它几乎表现得像 HTML 我想知道它是否也有丰富的主题库 我找到了一
  • 在 WPF 中将 png 图像合并为单个图像

    我正在寻找一种将一些 PNG 平铺图像合并为大图像的方法 所以我搜索并找到了一些链接 This https stackoverflow com questions 6325057 c sharp combine lots of images
  • 如何清除 (WPF) DataGrid 中的单元格(使其获取 NULL 值)?

    我们有一个列绑定到一个可为空的 SQL 整数值 当用户尝试 清除 单元格时DataGrid 我们得到验证错误 无法转换 如何将其设置为空并将 空 值绑定到基础列 我已经用谷歌搜索了这个问题两天并找到了任何东西 我试图编辑我对 HCL 的评论
  • 如何在清除排序描述后删除wpf网格排序箭头

    我单击网格标题对列进行排序 然后单击 重置 按钮以通过其集合视图清除排序描述 但排序箭头图标仍然保留在标题中 如何去除它 我在尝试弄清楚如何完全清除网格中的排序时遇到了这个问题 感谢 krishnaaditya 回答如何清除标题中的排序箭头
  • WPF 错误:属性元素不能位于元素内容的中间。它们必须位于内容之前或之后

    我有一个MergedDictionaries and DateTemplate里面一个ResourceDictionary一切都很好 直到我添加了一个Converter
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面

随机推荐

  • 在heroku cedar堆栈上部署sinatra应用程序(使用config.ru)

    我正在尝试重构我的 sinatra 代码以将我的主文件分成单独的文件 使用一些技巧这个回应 并且我在部署到 heroku 时遇到了麻烦 以前我没有config ru文件 并且刚刚使用了我的Procfile 即 web bundle exec
  • 从 Glassfish 取消部署所有应用程序

    我需要一种方法来从 Glassfish 取消部署所有应用程序 通常情况下 我会使用asadmin undeploy target target appname 对于每个应用程序 我的问题是我不知道服务器上存在的所有应用程序的名称 是否有一个
  • python 中的哈希函数族生成器

    我正在寻找一个哈希函数族生成器 它可以在给定一组参数的情况下生成一系列哈希函数 到目前为止我还没有找到任何这样的生成器 有没有办法做到这一点hashlib包裹 例如我想做类似的事情 h1 hash function 1 h2 hash fu
  • 创建 XML DOM 元素,同时保持区分大小写

    我正在尝试创建以下元素节点树
  • BigInteger 还是不是 BigInteger?

    在Java中 大多数基本类型都是带符号的 用一位来表示 因此当我超出类型的限制时 我可能会得到意想不到的结果 比如负数 有没有比使用 BigInteger 更好的解决方案 因为 BigInteger 存在性能问题 并且您需要使用类方法进行基
  • Robolectric 中的 getSystemService 返回具有 null Context 的对象

    在我的活动中onCreate I have AudioManager audioManager AudioManager getSystemService Context AUDIO SERVICE 当使用 Robolectric 测试活动
  • scipy 最小化 SLSQP - 'LSQ 子问题中的奇异矩阵 C'

    我正在尝试使用 SciPy 解决一个非常基本的优化问题 这个问题是受约束的并且具有可变范围 我很确定它是线性的 当我运行以下代码时 执行失败并显示错误消息 LSQ 子问题中的奇异矩阵 C 有谁知道可能是什么问题 提前致谢 编辑 我将在此处添
  • 如何获得动词的过去式? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 获取动词过去式的最有效方法
  • 如何设置 .NET WindowsAuthentication - 当我希望它使用实际用户时,名称始终显示为“IIS APPPOOL\Classic .NET AppPool”

    我使用以下代码通过 Kerberos 进行身份验证 IntPtr logonToken WindowsIdentity GetCurrent Token string authenticationType WindowsAuthentica
  • C# 将 GMT 日期字符串解析为 DateTime

    我在用着http www eyecon ro bootstrap datepicker 插件选择日期 选择日期后我得到例如Fri Nov 01 2013 00 00 00 GMT 0100 1 如果我使用 format 设置插件 为什么我会
  • 覆盖 AngularJS URL 验证器

    AngularJS 接受这个作为有效的 URL var URL REGEXP ftp http https w 0 1 w S 0 9 w Django 接受这一点 regex re compile r http ftp s http or
  • Objective-C 中的字符串常量是如何存储/检索的?

    有人可以解释编译器在何处以及如何存储字符串常量以及运行时如何访问它们吗 首先是强制性的 你不应该关心编译器如何做到这一点 任何基于编译器如何执行此操作的行为都是对无法保证的事物的危险依赖 并且可能会根据编译器的优化方式而改变 不要基于此编写
  • jQuery 未按正确顺序执行?

    我最近开始使用 jQuery 今天注意到它对我的行为有一个奇怪的问题 据我了解 JavaScript 是单线程的 因此它的所有操作都应该以 FIFO 为基础运行 然而 对我来说情况似乎并非如此 请考虑以下事项 设置如下 HTML 3 div
  • IntelliJ 中关于 Groovy 类的“类已存在”错误

    在 IntelliJ 2016 2 及之前版本 中 我们将 Groovy 类标记为红色 并显示错误 类已存在 我认为我们可以排除存根生成的原因 因为它已被停用 可能是我们的星座引起的 我们已将编译的 groovy 和 java 类包含在注册
  • 为什么 Spring AOP 不在运行时编织外部 jar?

    我有一个基于 Spring 3 构建的 java 应用程序 该项目有另一个 jar 作为依赖项 该依赖项包含一个 org aspectj lang annotation Aspect类 可以说 com aspectprovider aspe
  • SonarQube 无法启动 MariaDB 10

    我在 CentOS 7 中使用 yum 安装了 MariaDB SonarQube 抛出此异常 org sonar api utils MessageException Unsupported mysql version 5 5 Minim
  • 正则表达式字边界和特殊字符

    我有一个正则表达式来转义搜索字符串中的所有特殊字符 这很好用 但是我似乎无法让它与单词边界一起工作 例如 用干草堆 add or add 和针 正则表达式 gi匹配 然而正则表达式 b gi没有 关于如何实现这项工作有什么想法吗 Using
  • 无法建立 SSL 连接,如何修复我的 SSL 证书?

    我试图wget到我自己的盒子 它不能是 wget 中的内部地址 另一位开发人员是这么说的 当我得到时 我得到这个 wget http example com 2013 03 01 15 03 30 http example com Reso
  • Java中的正则表达式用于验证用户名

    我正在尝试使用 Java 中的用户名链 规则如下 长度 gt 3 有效字符 a z A Z 0 9 点 破折号和下划线 有人可以帮我解决正则表达式吗 尝试这个正则表达式 a zA Z0 9 3
  • 使用 MVVM 上下文菜单项命令绑定 WPF

    我知道这个问题已经在许多网站和 StackOverFlow 中以不同的方式被问过很多次 但我找到的所有答案都没有帮助我 准确地说 我无法理解它们并在我的应用程序中实现 所以我想从我的应用程序中添加一些代码 以便你们可以更好地帮助我 问题陈述