gpt4 book ai didi

c# - RelayCommand 未触发 MenuItem 单击 WPF MVVM

转载 作者:行者123 更新时间:2023-11-30 21:23:10 25 4
gpt4 key购买 nike

我的 WPF 窗体上有一个运行导入例程的菜单项,我已将命令属性绑定(bind)到 View 模型中的 ICommand 属性,但由于某种原因该方法不会触发。

这是 xaml:

<Menu Height="21"
Margin="0,-2,0,0"
VerticalAlignment="Top"
Grid.ColumnSpan="2">
<MenuItem Header="File" Command="{Binding ImportFileCommand}">Import</MenuItem>
</Menu>

这是在我的 View 模型中:

private ICommand importfilecommand;
public ICommand ImportFileCommand
{
get
{
if (this.importfilecommand == null)
{
this.importfilecommand = new RelayCommand(parm => ImportFile());
}
return this.importfilecommand;
}
}

private void ImportFile()
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Tab Files (*.tab)|*.tab*";

if (dialog.ShowDialog() == true)
{
// MessageBox.Show(dialog.FileName);
}
}

这是我用于表单上所有按钮的模式,但菜单项不起作用。我是否遗漏了什么或菜单项是否必须以不同方式完成?

谢谢。

最佳答案

将您的 XAML 更改为

<Menu Height="21" Margin="0,-2,0,0" VerticalAlignment="Top" Grid.ColumnSpan="2">
<MenuItem Header="File">
<MenuItem Header="Import" Command="{Binding ImportFileCommand}" />
</MenuItem>
</Menu>

在您的示例中,MenuItem 元素的“导入”内容隐式创建父文件 MenuItem 的子 MenuItem。此子 MenuItem 没有定义 Command 属性,因此无法执行。显然,父菜单项上定义的命令的可执行性被子菜单扩展功能覆盖。

关于c# - RelayCommand 未触发 MenuItem 单击 WPF MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943081/

25 4 0