gpt4 book ai didi

c# - 不同类中的命令定义

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:38 25 4
gpt4 key购买 nike

我是 WPF 的新手,所以我不确定我在做什么是否有意义.. 无论如何:我正在尝试为使用 ApplicationCommands.Open 的按钮实现一个命令。在我的 XAML 中,我有:

<Window x:Class="MainWindow"                
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ViewModel"
Title="MainWindow" Height="650" Width="1170">
<Window.DataContext>
<local:ResourceListViewModel/>
</Window.DataContext>

我想在 local:ResourceListViewModel 类中有一个命令定义,到目前为止我已经做到了:

void OpenCmdExecuted(object target, ExecutedRoutedEventArgs e)
{

MessageBox.Show("The command has been invoked");
}

void OpenCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}

所以我认为我必须做的是将这些方法绑定(bind)到一个命令,所以我尝试这样做:

 <Window.CommandBindings >
<CommandBinding Command="ApplicationCommands.Open"
Executed="OpenCmdExecuted"
CanExecute="OpenCmdCanExecute"/>
</Window.CommandBindings>

但是程序没有编译,因为它似乎在 MainWindow 中寻找这些函数。我怎样才能让程序知道我的函数定义在不同的类中?

最佳答案

这不是命令在 MVVM 中的工作方式。 RoutedCommand(例如 ApplicationCommands.Open)和 DelegateCommand(又名 RelayCommand)之间存在差异.

第一个是与 View 相关的,并在可视化树中冒泡等,必须由代码隐藏中的 View 处理。

第二个是 ViewModel 相关的,在 ViewModel 中定义(意味着 Command 实例是 ViewModel 本身的属性成员)

public class ResourceListViewModel
{
public RelayCommand OpenCommand {get;set;}

public ResourceListViewModel()
{
OpenCommand = new RelayCommand(ExecuteOpenCommand, CanExecuteOpenCommand);
}

//etc etc
}

关于c# - 不同类中的命令定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14403692/

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