- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我敢打赌这已经被多次回答了,但是......
对于 UserControl 上的按钮将其命令属性设置为 Find (ApplicationCommands.Find) 之类的简单情况,ViewModel 将如何处理该命令?我通常会看到命令处理程序与一个 CommandBinding 连接起来,它被添加到 UIElement 上的 CommandBindings 集合中,但我的 ViewModel 不是从 UIElement 派生的(应该吗?)。命令本身不会公开事件以在它们执行时进行通知,那么我应该在哪里连接以获取该信息?
编辑:如果可能,我想使用库存 WPF 来解决问题。我知道有很多可用的框架可以用于此类事情,但希望保持代码简单。
EDIT2:包括一些示例代码。
<UserControl>
<UserControl.DataContext>
<local:MyViewModel/>
</UserControl.DataContext>
<Button Command="Find"/>
</UserControl>
class MyViewModel
{
// Handle commands from the view here.
}
最佳答案
命令的目的是将生成订单的代码与执行订单的代码分离。因此:如果你想要紧耦合,你最好通过事件来做:
<UserControl ... x:Class="myclass">
...
<Button Click="myclass_find" .../>
...
</UserControl>
CommandBinding
给您的
UserControl
:
<UserControl ... >
<UserControl.DataContext>
<local:MyViewModel/>
</UserControl.DataContext>
<UserControl.CommandBindings>
<Binding Path="myFindCommandBindingInMyViewModel"/>
</UserControl.CommandBindings>
...
<Button Command="ApplicationComamnd.Find" .../>
...
</UserControl>
CommandBinding
给您的
UserControl
的
CommandBindings
在构造函数中,从 ViewNodel 中获取值:
partial class MyUserControl : UserControl
{
public MyUSerControl()
{
InitializeComponent();
CommandBinding findCommandBinding =
((MyViewModel)this.DataContext).myFindCommandBindingInMyViewModel;
this.CommandBindings.Add(findCommandBinding);
}
}
关于WPF - 在 ViewModel 中处理 ApplicationCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2328434/
我知道如何在 WPF 中设置默认的 ApplicationCommands 命令,以便通过上下文菜单启用简单的剪切、复制和粘贴操作。但是我需要能够在后面的代码中执行此操作,以便我可以在创建文本框时动态
我敢打赌这已经被多次回答了,但是...... 对于 UserControl 上的按钮将其命令属性设置为 Find (ApplicationCommands.Find) 之类的简单情况,ViewMode
WPF 文本框为自己的撤消/重做捕获 Ctrl-Z 和 Ctrl-Y。通常很好,但是在我们的应用程序中,我们有一些文本框,我不希望有这种行为,而是传递给整个应用程序以作为全局撤消处理。 我发现我可以通
我想标题中的问题已经很清楚了。当我打电话时会发生什么 ApplicationCommands.Close.Execute(null,null) 来 self 的 View 模型类。 我有一个显示用户控
我想使用 ApplicationCommands。剪切、复制、粘贴、保存...它们看起来很有趣,因为命令路由、键绑定(bind)以及某些控件使用它们的事实。我了解如何绑定(bind)到我的 VM 上的
我已经成功地使用了一些使用 MVVM-Light 的自定义命令,但我希望我的应用程序能够响应标准的 ApplicationCommands,不仅在窗口级别,而且在详细的项目级别。 我有一个 TreeV
我使用标准的剪切、复制和粘贴命令(它是 ApplicationCommands 类的一部分)。是否可以重新定义 CanExecute 方法? 这是我的代码: XAML:
我正在将 WPF 与 Prism 结合使用。我在 Module A 中有一个自定义 Canavs DrawingCanvas.cs,我已将 ApplicationCommands.Delete 设置为
我是一名优秀的程序员,十分优秀!