Tag: commandbinding

CanExecute-Result确实更改后,控件不会刷新

在我的窗口中,我有加载和保存方法的按钮。 我使用CommandBinding,并且save-button具有CanExecute属性,以防止用户在加载数据之前保存数据。 CanExecute-Methode连接到一个名为“canSaveXML”的简单bool值 private void Save_CanExecute(object sender, CanExecuteRoutedEventArgs e) { if (canSaveXML == false) { e.CanExecute = false; } else { e.CanExecute = true; } e.Handled = true; } 我的意图是在加载数据后设置canSaveXML = true,但在值发生更改后控件不会刷新。 我做了一些阅读,发现我必须调用CommandManager.InvalidateRequerySuggested。 我现在就这样做,我的代码看起来像这样。 canSaveXML = true; CommandManager.InvalidateRequerySuggested(); 但控件(按钮)仍然不刷新。 我仍然被禁用,直到我在UI上触发任何内容或最小化/最大化窗口。 我这样做后按钮启用。 这有什么不对? 在MSDN示例中,一次又一次地使用dispatchertimer调用CommandManager.InvalidateRequerySuggested,但我拒绝相信这将是唯一的解决方案。

为什么DataBinding没有传播到UserControl

今天早上我在这里问了一个问题,做一个简单的工作样本给了我一个不同于预期的行为。 GitHub上的完整工作样本。 主要部分代码如下。 在本例中,如果UserControl直接用作Window的子节点,则命令永远不会传播到任何UserControl。 如果UserControl用作ListBox ItemTemplate的DataTemplate,它也不起作用。 我还包括一个黑客按钮来修复Command到达UserControls的问题。 黑客来自StackOverflow 。 但是使用hack并不能解释为什么UserControl没有收到Command(没有它)并且使用这个hack也打破了良好编码的第一条规则:“Hi cohesion and Low coupling”。 应该在窗口代码中使用hack来管理UserControl中的Command,我的想法是它应该默认发生。 为什么命令没有默认传播到UserControl,我该怎么做才能以干净的方式将命令传播给UserControl? 注意:在UserControl中仅使用一个CommandBinding(删除一个或另一个)不能解决问题。 部分代码: 1 2 Put focus on TestBlock and click here to see if command occurs Hack 用户控件:

执行命令不会在后面的资源字典代码中触发

我为它创建了资源字典和代码隐藏文件。 在XAML中,我定义了命令绑定并添加了Executed handler: 这是代码背后: partial class StyleResources : ResourceDictionary { public StyleResources() { InitializeComponent(); } private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) { //this is never executed } } 我不知道为什么在单击按钮时命令没有执行,而且,当我没有将CanExecute设置为true时,为什么按钮被启用。 我也尝试将其设置为true,但CanExecute事件也没有触发。 以下是我使用资源字典的方法: public partial class MyWindow : Window { public MyWindow() { InitializeComponent(); Uri uri = new Uri(“/WPFLibs;component/Resources/StyleResources.xaml”, UriKind.Relative); ResourceDictionary Dict = Application.LoadComponent(uri) as ResourceDictionary; this.Style […]

将CommandBindings添加到控件与使用RegisterClassCommandBinding之间有区别吗?

以前我一直在使用 this.CommandBindings.Add( new CommandBinding(ApplicationCommands.Copy, this.cmdCopy_Executed, this.cmdCopy_CanExecute)) 其中cmdCopy_Executed是一个非静态函数,但我见过人们使用 static MyControl() { CommandBinding binding = new CommandBinding(ApplicationCommands.Save, CommandHandler); CommandManager.RegisterClassCommandBinding(typeof(MyControl), binding); } private static void CommandHandler(object target, ExecutedRoutedEventArgs e) { MessageBox.Show(“Command Handled!”); } CommandBinding是静态的。 一个优先于另一个?

MVVM命令绑定

我正在尝试学习MVVM模式。 我遇到的主要问题是学习我应该在哪里声明,创建和绑定命令对象。 2个例子: 我有一个主要forms,就像一个开关板或主菜单。 显示选择按钮1和视图1,选择按钮2并显示视图2。 大。 现在我想回到主窗体,所以我需要一个名为“主菜单”的视图1(和视图2)上的按钮。 我应该在哪里定义命令和命令处理程序,以便我可以绑定到“ShowMainMenu”命令? 我可以在View2ViewModel中创建它们但是我没有权限显示主视图? 或者,我可以在MainView模型中创建thim但是然后如何在子视图模型中绑定它们(我根据mvvm建议使用RelayCommand obejct并且它们不会冒泡到父模型。) 我在一个主窗口视图中可以看到两个用户控件,让我们称之为MainView,UC1和UC2。 每个都有ViewModel MainViewModel,UC1ViewModel,UC2View Model。 我在UC1上有一个名为“AddItem”的按钮。 它应该在UC2的列表中添加一个项目。 设置“AddItemCommand”并绑定到它的当前方法是什么。 Command应该在MainViewModel,Uc1ViewModel还是UC2ViewModel? 我怎么会和它结合起来。 谢谢你的帮助。

如何在WPF中绑定命令

有时我们使用复杂的方法很多次,我们忘记了完成任务的最简单方法。 我知道如何进行命令绑定,但我总是使用相同的方法。 创建一个实现ICommand接口的类,并从视图模型中创建该类的新实例,绑定就像一个魅力。 这是我用于命令绑定的代码 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = this; testCommand = new MeCommand(processor); } ICommand testCommand; public ICommand test { get { return testCommand; } } public void processor() { MessageBox.Show(“hello world”); } } public class MeCommand : ICommand { public delegate void ExecuteMethod(); private ExecuteMethod […]

WPF / MVVM – 如何在ViewModel中双击TreeViewItems?

(注意 – 这是一个重新发布,因为我的第一个问题是在错误的标题下发布的:对不起!) 我有一个标准的WPF树视图,并有绑定项目来查看模型类。 我现在希望在双击项目时处理行为(打开文档visual-studio-style)。 我可以在树视图(显示xaml)的控件中触发事件处理程序,但是如何绑定到视图模型类上的特定行为 – 例如ProjectViewModel? 优先受ICommand实施者约束,因为这在别处使用…