问题标签 [routed-commands]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
346 浏览

wpf - WPF 中的独立命令对象

将 WPF 命令实现为独立对象是否可能/可行?如果是这样,这通常是如何完成的?我看到的大多数关于命令的示例通常涉及使用 RoutedCommand、RoutedUICommand 或 ICommand 的其他一些实现,例如 RelayCommand。这些命令在 MVVM 模式中的工作方式是通过属性公开这些命令类型之一的实例。在 ViewModel 内部,命令的逻辑被实现为 ViewModel 上的一个方法,然后作为委托传递给命令对象。

据我了解,“经典”命令模式是将每个命令实现为它自己的独立对象,例如 OpenCustomerViewCommand。由于逻辑将完全封装在它自己的对象中,因此它可能会在我的应用程序的其他部分中重用。例如,如果我可以从我的应用程序中的多个位置打开 CustomerView,那么能够简单地在可以访问 CustomerView 的每个 ViewModel 上创建 OpenCustomerViewCommand 的实例可能会有所帮助,而不是将该方法复制并粘贴到每个 ViewModel ,并将委托传递给 RelayCommand。如果我理解正确,预定义的应用程序命令(例如剪切和粘贴)会以这种方式运行。

对我来说,必须在 ViewModel 中提供逻辑似乎会降低命令模式的价值。我想我并不真正理解这样做与背后的代码实现 UI 事件的命令处理程序之间的主要区别。有什么理由我应该使用 RoutedCommand 模式而不是我上面描述的更经典的方法?

0 投票
0 回答
610 浏览

c# - 禁用 CommandManager RequerySuggested 事件

我想在不使用 CommandManager RequerySuggested 的情况下测试我的项目性能。我使用以下代码禁用 CommandManager 触发 RequerySuggested 事件。它从 RequerySuggested 事件中删除所有事件处理程序。有没有其他更简单的方法来实现这一点。

0 投票
1 回答
269 浏览

c# - 需要解决方法来覆盖 RoutedUICommand.Text 属性

我有一个像这样的静态命令类(但有更多命令):

它应该使用我的字典来获取正确语言的文本,但这是行不通的,因为在执行静态构造函数时我的字典没有初始化。

我的第一次尝试是创建一个派生自 RoutedUICommand 的新命令类,覆盖 Text 属性并在 get 方法中调用 dict。但是 Text 属性不是虚拟的,它调用的 GetText() 方法也不是虚拟的。

我唯一能想到的是在这个类中提供一个静态初始化方法来翻译所有的字典键。但这不是很干净恕我直言,因为我必须像这样再次命名每个命令

如果我忘记命名一个,不会有错误,只是没有翻译。我什至不喜欢我必须在此类中两次命名命令,并在 XAML 命令绑定中再次命名。

你有什么想法可以更优雅地解决这个问题吗?

我非常喜欢 RoutedUICommands,但是像这样它们对我来说毫无用处。为什么微软不能更频繁地添加“虚拟”这个小词?(或者像 JAVA 一样让它默认?!)

0 投票
1 回答
125 浏览

wpf - 作用于两个控件的命令

查看标准的 WPF 命令,例如复制/粘贴,它们似乎都使用一个按钮并作用于文本框。

我的问题:当我有一个按钮时如何使用命令,但我需要在两个单独的控件(一个文本框和一个组合框)中设置数据。如果用户在文本框中写入文本,但未选择组合框值,则 CanExecute 应该会失败。这适用于已设置组合框但不设置文本框的情况。

具体来说,就我而言,所有这些控件都包含在一个 tabitem 中。同样,我还有另一个选项卡,只有一个文本框和一个按钮。我希望它具有与第一个选项卡相同的功能,除了它不检查组合框值,它应该检测到没有组合框并传入默认的“空对象”值。

Execute 方法应该在我的视图模型中调用一个方法,并从组合框和文本框中传入值。同样,每个选项卡都应该传入另一个唯一的静态值;我想我可以使用命令参数来处理这个问题。

我该如何进行这项工作?我是否将父选项卡设为 commandtarget 并在 can/execute 方法中直接引用其子控件?

0 投票
2 回答
287 浏览

.net - How and where do ICommands fit into the overall WPF MVVM pattern?

I'm trying to learn how to use WPF commands, and how they fit into the MVVM pattern. I understand that some controls, like a button or menu, have a Command property which when set to an instance of an ICommand class connects the button to that command. Once this is set the button will then disable and enable with the CanExecuteChanged event of the command, and clicking the control will call the Execute method of the command.

However, where should the instance of each ICommand live? I've seen various different options in tutorials and I'm not sure which is correct. In some examples a static "ApplicationCommands" class is created and an instance of each command is assigned to a static property of that class. In other examples I've seen commands set as properties of the ViewModel, and in others of the View/Window itself. What's the preferred place for the command instances to live?

Also, how does a command relate back to the View, View Model, or Model? Which of these components should the command be aware of and or manipulate? What should happen when a command is executed? Should it call some method of the Model which then communicates changes back to the View Model/View? Or should a command communicate to the model through a method of the View Model?

0 投票
0 回答
183 浏览

wpf - 重用 WPF 命令库中的命令是个坏主意吗?

WPF 提供了一个预定义命令库(ApplicationCommands.Save、NavigationCommands.NextPage 等),我们可以在自己的应用程序中为其创建命令绑定。我知道可以为单个 RoutedCommand/RoutedUICommand 创建多个命令绑定,通过指定不同的执行处理程序来根据应用程序上下文获得不同的行为。

据我了解,RoutedUICommand 的目的主要是提供一个通用的语义参考。ApplicationCommands.New,引用 MSDN 文档,“表明了创建新项目的意图。” 此命令可用于命令绑定中,以在应用程序中的多个不相关表单上创建新项目。

我几乎从未见过这种重复使用。在我从事的在线代码和项目中,我通常会看到在代码隐藏或视图模型中定义的 RoutedCommand,名称类似于“NewEmailCommand”。

我看到重用命令的几个优点:

  • RoutedUICommands 通常定义了 Text 属性,因此不需要定义菜单项 Header。
  • 当命令定义了输入手势时,不需要在每个使用它的地方都指定输入绑定。
  • 当命令定义了输入手势时,菜单项中的 InputGestureText 会自动填充。
  • 使用相同的命令可以提高整个应用程序的一致性——无论是用于命令的标签还是键/鼠标绑定。

想到的一些可能的缺点:

  • 在某些情况下,命令可能不明确。例如:您可能需要在一个位置使用两个不同的“新建”命令(新建->{项目...,网站...})。
  • 取而代之或重用一个命令,人们可能想要重用一个使用静态处理程序的命令绑定。
  • ApplicationCommands.New 不是一个特别有用的命令名称;它不会告诉您有关当前命令处理程序的任何信息(例如正在创建的内容)。

我非常倾向于重用命令,但正如我所说:我根本没有在实践中看到它。

你的喜好是什么?有没有我没有听说过的公认的“最佳实践”?重用命令是否有明显的问题/其他好处?

0 投票
1 回答
7861 浏览

wpf - WPF 防止事件在控件外冒泡

让我们从元素树开始。最上面的元素是一个 WPF 窗口,它已经注册了ApplicationCommands.Find命令。某些子元素具有 KeyBinding,手势键 ENTER 指向此命令。没关系,如果有人按 ENTER,则将执行该命令。其中我有一个自定义控件,带有一个用于搜索和选择某些元素的弹出窗口。不过,在这个地方,我不想让自定义控件之外的键事件冒泡。但是我设置e.handled = trueKeyDown += new KeyEventHandler (..),这应该是一个冒泡路由事件,该自定义控件内的所有控件(文本框等)将忽略任何类型的输入。但我只想在 CustomControl 级别停止冒泡,说:从叶子到最顶层的控件父级,而不是更远!这是为什么?我没有过滤PreviewKeyDown,所以事件必须传播到叶子,然后它应该回到父节点,但事实并非如此。

谢谢

编辑:示例代码:

0 投票
1 回答
1094 浏览

wpf - 以编程方式连接数据模板中控件的事件处理程序

我在整个应用程序中都有可点击的图像/矩形控件,并且更喜欢将它们连接到代码中:

我正在努力理解如何对数据模板做同样的事情。我基本上需要找到模板应用于每个项目的位置,这样我就可以插入我的钩子。

我知道 WPF 建议使用某种类型的命令,但这需要更多样板代码,更不用说图像/矩形不支持命令,所以我不得不用样式按钮控件重做整个事情。

这可能吗?

0 投票
1 回答
2731 浏览

wpf - 我必须使用 CommandTarget 吗?我认为任何集中的元素都会收到命令

我试图了解如何使用 RoutedCommands。我的印象是,如果我没有在 Button 上指定 CommandTarget,任何有焦点的元素都会收到命令。但由于某种原因,它不起作用。这是不起作用的xaml:

如果我将 CommandTarget 添加到 Button 它可以工作,但仅限于指定的文本框。

如何让任何聚焦元素接收命令?

谢谢!

0 投票
3 回答
10695 浏览

windows-7 - 路由表中的环回

我正在做一个项目,在 VMWare 来宾中使用 FreeBDS 创建一个 WAN 仿真器,该 VMWare 来宾配置为在主机操作系统与其正常网关路由器之间路由流量。我计划修改主机上的路由表,使其流量正确重定向,并在来宾中使用 ipfw 来修改各种网络特征。

在 Windows 7 中,我可以使用“ROUTE -f”完全清除路由表,但之后我无法为环回地址重新创建路由。

这是我用“ROUTE -f”清除它之前的路由表:

在“ROUTE -f”之后,“Active Routes:”下面的所有路由在 Windows 7 上都消失了。(这在 Vista 上不会发生;只有默认网关,即第一行消失。)我已经能够重新创建表在大多数情况下,但我无法为 127.0.0.1 重新创建路由。不会出现错误消息,但会显示 ROUTE 的帮助文本。

谁能告诉我手动添加回环地址路由的方法?