问题标签 [commandbinding]

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 回答
1178 浏览

wpf - WPF:当绑定命令无法执行时,如何使按钮(splitbutton)启用?

我正在构建一个由两个重叠按钮和弹出窗口组成的自定义拆分按钮 - 像这样(图像显示了一些通用拆分按钮):

拆分按钮 http://windowsclient.net/wf/blogs/jfoscoding/splitbutton.PNG

当单击带有箭头的右侧时,我的 SplitButton 会打开弹出窗口,并在单击主按钮时执行 SplitButton.Command。

然而,在我的情况下,有时默认操作无法执行,在这些情况下,当单击主按钮时,我想打开弹出窗口。

我已经完成了,但问题是这样的:

  • SplitButton 是 ToggleButton 的子类
  • 在 ControlTemplate 中,我有一个 ToggleButton(底部)和 Button(较短,覆盖在顶部)
  • Button.Command="{TemplateBinding Command}"(所以我可以这样做<SplitButton Command="{Binding MyDefaultAction}">...
  • 问题:当命令无法执行时,整个 SplitButton 都会被禁用。

我想继续使用相同的命令,但要覆盖按钮的行为,以便在 Command.CanExecute() 返回 false 时它不会被禁用。我怎样才能做到这一点?

谢谢!

0 投票
2 回答
7086 浏览

wpf - 帮助将命令参数绑定到相关源

我有一个ListBox我已经添加ContextMenu到的。我希望将其中的一项ContextMenu绑定到命令,并且我希望传递给该命令的参数成为ListBox控件的当前选定项。这是我的xml:

ListBox是绑定到视图模型对象的用户控件的一部分。我在底层对象上的命令方法被调用,但传入的参数始终为空。

我已经测试了将绑定更改CommandParameter为简单地{Binding}导致用户控件的数据上下文被传递到我的方法中 - 所以我知道该命令正在工作并正确传递参数。我似乎无法获得正确的绑定来访问ListBox'SelectedItem属性。

帮助?

0 投票
2 回答
4398 浏览

c# - MVVM 命令绑定

我正在尝试学习 MVVM 模式。我遇到的主要问题是学习我应该在哪里声明、创建和绑定命令对象。

2个例子:

  1. 我有一个主窗体,其作用类似于开关板或主菜单。选择按钮 1 和视图 1 显示,选择按钮 2 和视图 2 显示。伟大的。现在我想回到主窗体,所以我需要视图 1(和视图 2)上的一个按钮,称为“主菜单”。我应该在哪里定义命令和命令处理程序,以便我可以绑定到“ShowMainMenu”命令?我可以在 View2ViewModel 中创建它们,但是我无权显示主视图?或者,我可以在 MainView 模型中创建它,但是我如何在子视图模型中绑定到它们(我根据 mvvm 建议使用 RelayCommand 对象,它们不会冒泡到父视图。)

  2. 我在一个主窗口视图上显示了两个用户控件,我们称它们为 MainView、UC1 和 UC2。其中每一个都有 ViewModel MainViewModel、UC1ViewModel、UC2View Model。我在 UC1 上有一个名为“AddItem”的按钮。它应该在 UC2 的列表中添加一个项目。设置“AddItemCommand”并绑定到它的正确方法是什么。命令应该在 MainViewModel、Uc1ViewModel 还是 UC2ViewModel 中?我应该如何绑定它。

谢谢你的帮助。

0 投票
1 回答
3976 浏览

wpf - 命令绑定到用户控件拖放

如何通过使用 WPF 中的命令模式来创建响应用户控件的拖放事件的 UI?

0 投票
1 回答
1087 浏览

wpf - UserControl 中的命令绑定用作 ListBox.ItemTemplate

我有一个Listbox与一个UserControl作为DataTemplate。这UserControl有一个Button从列表中删除该项目。

ItemsSource定义为:

这是UserControl简化的:

当用户单击Remove按钮时,它应该从ObservableCollection.

问题是,DataContextfor eachListBoxItem的 ViewModel 与持有ObservableCollection.

我不确定如何将Remove按钮绑定到ICommand“父”视图模型中的一个。任何帮助,将不胜感激。非常感谢。

0 投票
1 回答
2060 浏览

wpf - WPF 中的命令绑定内存泄漏

当我创建一个具有到 RoutedUICommand 的 CommandBinding 的用户控件时,我担心我会出现内存泄漏。

设想:

将 RoutedUICommand 作为 c 类中的静态对象,我在其中存储我的命令 在用户控件上实现 CommandBindings。将用户控件添加到主窗体。从主窗体中删除用户控件,将对它的引用设置为空。

命令绑定的 canExecute 继续触发。我没有对 UserControl 的引用,所以它泄露了。并且在表单关闭后会持续触发很长时间。(我还没有看到它停止)如果我强制垃圾收集它会被收集(好吧 canExecute 停止触发)

我有一个测试项目来说明这一点。我在 canExecute 中有一个 Console.WriteLine,它打印出触发该方法的对象的哈希码。它有一个添加新用户控件的按钮和一个删除它的按钮。

我不应该关心这个吗?如果强制,用户控件会被收集。这是否意味着它将在下一次收集时收集?我注意到我们的应用程序的性能下降并且正在跟踪内存泄漏等。我们有复杂的表单,其中包含很多 ui 元素,当从布局中删除时,它们会占用处理器和内存空间。(我们使用了很多命令)我认为一旦从可视化树中删除了某些东西,它就无法再接收路由事件。我错过了什么?

0 投票
2 回答
1049 浏览

wpf - 从可视树中删除元素后,如何触发 commandBinding 的 CanExecute ?

我在这里有一个相关的问题,我有一个带有命令绑定的用户控件。用户控件已从可视化树中删除,但 canExecute 仍在触发。我对指挥模型的理解是,它像路由事件一样冒泡和隧道。那么一旦附加了命令绑定的元素不再在可视树中,CanExecute 怎么能触发呢?

0 投票
1 回答
6746 浏览

wpf - WPF MVVM:ICommand 绑定到控件

我完全迷失在 MVVM 中使用的命令绑定中。我应该如何将我的对象绑定到窗口和/或其命令到控件以获取在 上调用的方法Button Click

这是一个CustomerViewModel类:

ViewModelBase实现INotifyPropertyChanged接口下面是如何Button绑定到命令的:

的实例CustomerViewModel分配给DataContext包含 的窗口Button

给定的示例不起作用:我在方法中设置了断点,Save但执行没有传递给方法。我看过很多例子(在stackoverflow上也是),但不知道应该如何指定绑定。

请告知,任何帮助将不胜感激。

谢谢。

PS可能我需要RelativeSource在按钮绑定中指定......像这样:

但是应该为祖先指定哪种类型?

0 投票
1 回答
2578 浏览

wpf - 列表框鼠标绑定到命令不起作用

我想将 MouseDoubleClick(或 PreviewMouseDoubleClick)绑定到我在自定义 WPF Control 中定义的自定义 Command

问题是它不起作用。

0 投票
1 回答
2363 浏览

c# - 从命令修改 UI - 在 WPF 中使用命令绑定

在我的 WPF 应用程序中,我有一个 TextBox 和一个 Button。该按钮有一个命令绑定到一个将对文本执行某些操作的命令。

现在,我希望单击按钮的操作也清除 TextBox。这样做的最佳方法是什么?我看到两个选项:

我也可以在 Button 上添加一个 Click 事件 - 使文本清晰。这对我来说听起来不是一个好主意,因为我会将动作分成两个地方,依赖于它们执行的顺序是否正确。

我现在使用的选项是传递整个 TextBox 而不是 TextBox.Text 属性。这样做该命令可以首先获取文本,使用它,然后清除 TextBox。我的绑定是相同的,但没有“路径”:

我的命令的基本部分:

我的问题是该命令现在依赖于 UI 组件,并且 UI 依赖于命令来实际对其进行一些修改。我对此并不完全满意。有没有更好的办法?