gpt4 book ai didi

wpf - 使用 MVVM 的上下文菜单项命令绑定(bind) WPF

转载 作者:行者123 更新时间:2023-12-04 21:59:42 37 4
gpt4 key购买 nike

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

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

这是我在 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
}
}

** 我想确切地知道我在哪里做错了??为什么 DataBinding 没有发生?
请帮助我解决这个问题。请提供我当前代码中的示例代码或修改,我可以从中实现它。 **

最佳答案

我遇到过同样的问题。一旦我将命令绑定(bind)从后面的代码移到 ViewModel 中,命令绑定(bind)就会停止工作。在 View 模型中,我必须将 ICommand 从 RoutedCommand 更改为 DelegateCommand。我能够通过以下方式使其工作 -

将 Opened 事件处理程序添加到您的上下文菜单 -

<ContextMenu x:Key="columnHeaderMenu" Opened="ContextMenu_Opened">
<MenuItem Command="{Binding CutCommand}" Header="Test" />
<MenuItem Header="Copy"/>
<MenuItem Header="Paste"/>
</ContextMenu>

在后面的代码中,您可以将 ViewModel 分配给上下文菜单的 DataContext -
private void ContextMenu_Opened(object sender, RoutedEventArgs e)
{
ContextMenu menu = sender as ContextMenu;
menu.DataContext = _vm;
}

关于wpf - 使用 MVVM 的上下文菜单项命令绑定(bind) WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3837557/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com