问题标签 [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.
wpf - 如何将 RoutedCommand 获取到新的 ViewModel?
我有一个相对简单的分层数据主从 WPF 窗口,使用 MVVM 开发,其中 Window 指向一个 ViewModel,该 ViewModel 将 ViewModel 作为其属性之一公开用于详细视图:
ViewModelBase
包含 Josh Smith 的VMCommanding代码的实现,我使用 Roslyn 的东西将其移植到 Visual Basic。
Window 的 XAML 看起来基本上是这样的,其中包含不相关的细节和很多右括号被省略。
在“Master”中选择一个项目ListBox
会将DataContext
“Detail”ListBox
设置为相应的 DetailViewModel。在该列表框中选择第二个项目会将DataContext
“详细信息”框更改为所选内容的相应 DetailViewModel。出于性能原因,一旦选择,DetailViewModel 将被保留并在DataContext
“详细信息”框中切换进出。
在“详细信息”中选择一个项目ListBox
会触发一个 RoutedCommand,它应该被“主”框中选择的 ViewModel 捕获。但是,RoutedCommand
s 永远不会将焦点转移到正确的 DetailViewModel;该命令始终被与第一个“主”列表框选择相对应的 DetailViewModel 捕获。
我需要做些什么不同的事情?
python - 如何使用 SSH 从基于 Django 的基于 Web 的应用程序执行远程主机上的命令?
我必须在远程主机上执行一些命令,这个主机将是一个“路由器”。我从来没有做过 RPC 调用的工作。另一个大问题是我必须从基于Django
Web 的应用程序执行这些命令。步骤如下:
- 用户打开一个页面并选择一个命令来执行
- 用户从给定列表中选择远程主机
- 用户点击执行按钮
- 同时 Django 将检查安全问题。这意味着它将授权远程主机使用
SSH
- 并在主机上执行所需的命令并发回一条消息
"Done!"
我应该如何开始解决这个问题?
我应该如何创建从用户配置文件页面到远程主机的 SSH 连接?
出于安全原因,我想使用用户私钥创建连接。我也找到了一些相关的问题,但没有找到正确的方向:)
c# - 使用隧道而不是冒泡的 RoutedCommands
我有一个自定义控件 ( MyControl
),它公开了一个自定义命令。我希望父母Window
能够调用这个命令,并且所有人都MyControls
应该对它做出反应。
我已将该命令添加到MyControl
的CommandBindings
集合中,该集合还提供了一个CanExecute
始终返回 true 的回调。
我的问题是调用此命令的菜单项永远不会启用。我假设这是因为菜单MyControls
在可视树的上方,但老实说,我对RoutedUICommand
' 范围的确切工作方式有点模糊。
有人可以澄清我做错了什么,或者这是否可能?
c# - 无法在 Datatemplate 中设置 CommandBinding
以下是两个 xaml 片段,其中唯一的区别是一个示例直接填充窗口的可视化树,DataContext
而另一个示例通过应用数据模板构造相同的窗口。
可视化树内容/DataContext
业务对象内容和数据模板
第一个示例(可视树内容和数据上下文)按预期工作,而设计者在第二个示例中引发编译时错误:“无法绑定到目标方法,因为它的签名或安全透明度与委托类型。 ”尽管出现设计器错误,我仍然可以在本地运行应用程序,我已验证路由命令处理程序正在执行。当尝试在其他 PC 上运行应用程序时,应用程序在启动时静默失败,在 Windows 事件日志中留下 xaml 加载错误日志条目。当我从第二个片段中删除命令绑定时,设计器错误消失了,应用程序在本地和其他 PC 上执行都没有问题。
有人可以向我解释异常的原因以及如何在模板中指定命令绑定。
c# - 分离视图、命令表示(文本、图标)和命令逻辑(执行、CanExecute)
如果 TL;DR:请参阅最后一段。
纯 WPF “建议”将演示文稿(控件、文本、图标)放入视图并将命令逻辑(执行、CanExecute 方法)放入代码隐藏中。除了将逻辑放入视图 ( ) 和代码隐藏是一种不受欢迎的做法之外,它对XAML 复制CommandBindings
毫无帮助:每次命令时都必须复制文本、图标、大图标、提示和许多其他属性用于:主菜单、上下文菜单、工具栏按钮、功能区按钮和其他控件。
看起来第一个问题(真正分离视图和逻辑)由DelegateCommand
,RelayCommand
和类似的方法解决。命令逻辑被移动到 ViewModels(或在 MVVMC 的情况下为控制器),代码隐藏是干净的,CommandBindings
视图中没有其他废话。
但是,对于演示重复问题,我找不到普遍接受的解决方案。我想将命令表示(文本、图标)和命令逻辑(Execute
、CanExecute
方法)分开。我能找到的所有代码要么将演示文稿放入代码中(通过创建带有and之类的RoutedCommand
附加属性的 a ),要么将代码放入演示文稿中(即,将处理程序放入视图和代码隐藏中)。我也不喜欢。我认为演示文稿应该完全在 XAML 中,代码应该完全在 CS 中(在 ViewModel 或 Controller 中)。Label
Icon
问题:如何分离视图(带有引用命令的控件的 XAML)、命令的表示(每个命令的标签、图标等)和命令的逻辑(ViewModel 或控制器中的 C# 代码等)Execute
?CanExecute
wpf - 为什么我的命令绑定仅在按钮位于工具栏中时才有效?
我有一个带有工具栏的窗口,其中包含一些带有命令的按钮。按钮停止工作,因为我用包含按钮的堆栈面板替换了工具栏。
据我了解,这应该没有任何区别。按钮仍然设置了 Command 属性,我没有更改自定义命令类中的任何内容,并且 CommandBinding 也仍然相同。它们实现了一些比按钮更深的网格和用户控件,但它们确实有效,只要按钮位于 ToolBar 控件中!
如果我直接在窗口中实现 CommandBindings,它们就可以工作(但这不是我想要的)
下面是代码(删节):
我知道它不会编译,但我必须简化它。只要我用我的应用程序将“StackPanel”替换为“ToolBar”,这就会起作用。怎么可能?
.net - 程序在后台运行时的 WPF MediaCommands
我有一个程序,我在我的 MainWindow 中将一些.NET 媒体命令实现为路由命令,如下所示:
如果当前正在使用该程序,这将正常工作。但是,如果我切换到不同的程序并发送 TogglePlayPause MediaCommand,则不会触发该命令(永远不会调用 CanExecute)。
有没有办法确保我的程序始终响应 MediaCommands,即使它在后台运行?
FWIW 程序 Rdio 似乎能够做到这一点。我可以将它放在后台,发送 MediaCommand,音乐就会播放或暂停。
谢谢你。
c# - RelayCommand 与 EventToCommand
我对MvvmlightRelayCommand
和EventToCommand
在 Mvvmlight 中有点困惑。似乎EventToCommand
处理EventTrigger
并调用一个RelayCommand
来做工作。如:
我的理解正确吗?
那么,我们可以RelayCommand
直接使用 with EventTrigger
,而不需要使用EventToCommand
吗?
谢谢你的帮助!
c# - 使命令仅在窗口的一部分中起作用
我有这个 xaml
和这个代码隐藏文件:
如您所见,窗口中有一个名为 Cmd 的命令。窗口中有 2 个矩形 - 黄色和绿色。我希望命令 Cmd 仅在鼠标单击黄色矩形而不是绿色矩形时才起作用。我怎样才能做到这一点?
wpf - 自定义附加命令
我有一种情况,我想为框架元素编写自定义命令。我做了如下:
这是我附加在xaml中的:
但是,我想在单击按钮时触发此命令。
非常喜欢
所以我写了以下内容:
我不明白那是怎么接线的。我应该在哪里声明上述路由命令?绝对不能在 FrameworkElement 类中做到这一点。有没有办法附上它?对不起,如果我无法清楚地说明问题。简而言之:如果我要以附加的方式为文本框编写“复制”命令,我该怎么做?
编辑:@Erti 发表评论后:
现在我有两个类,UndoRedoManager
请注意注册依赖属性时在 PropertyMetadata 中传递的默认值。在 xaml 中,我将其用作:
另一个是 StaticCommand 类:
在 xaml 中,我将其用作:
但是现在上面的按钮根本没有被激活。