- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个按钮
<Button
android:id="@+id/ButtonConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Disconnect"
local:MvxBind="{'Click':{'Path':'DisconnectCommand'}}" />
我有一个命令
public IMvxCommand DisconnectCommand
{
get
{
return new MvxRelayCommand(this.GetService<IConnectionService>().Disconnect);
}
}
然后我想启用/禁用 DisconnectCommand 使用
DisconnectCommand.CanExecute(this.GetService<IConnectionService>().UsbConnected);
但这显然是错误的(它不起作用),我将检查作为参数输入,但通常我会这样做
DisconnectCommand.CanExecute = someBool;
但是没有要设置的属性,那怎么办呢?
最佳答案
要了解如何使用 CanExecute
,请查看 Silverlight 或 WPF - 那里有很多博客讨论如何使用 ICommand
- 例如http://weblogs.asp.net/nmarun/archive/2009/12/02/using-icommand-silverlight-4.aspx或 http://blog.galasoft.ch/archive/2009/09/26/using-relaycommands-in-silverlight-and-wpf.aspx
一个例子是这样的:
private MvxRelayCommand _disconnectCommand;
public IMvxCommand DisconnectCommand
{
get
{
if (_disconnectCommand == null)
_disconnectCommand = new MvxRelayCommand(this.GetService<IConnectionService>().Disconnect, item => this.IsItemConnected(item));
return _disconnectCommand;
}
}
private void SomeServiceNotificationHandler()
{
_disconnectCommand.RaisePropertyChanged();
}
private bool IsItemConnected(object thing)
{
return /* your code */;
}
不过有个小问题....
CanExecute
并没有真正在所有平台的所有 MvxBindings 中完全实现......它对其中一些有效,但对其中一些无效 - 我也不真的知道目前有哪些!如果您遇到问题,请让我知道(通过 GitHub 问题),它们将得到修复...
就个人而言...我不倾向于使用 CanExecute
- 我倾向于使用一个单独的 bool 属性,然后我将其绑定(bind)到控件上可用的任何属性 - 例如大多数控件都有类似 Enabled
、IsEnabled
、Disabled
、IsDisabled
等内容。
我通常发现设置 bool 属性比调用 RaiseCanExecuteChanged
例如我会使用类似的东西:
<Button
android:id="@+id/ButtonConnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Disconnect"
local:MvxBind="{'Click':{'Path':'DisconnectCommand'},'Enabled':{'Path':'UsbConnected'}}" />
您绝对可以争辩说 CanExecute
方法具有优势 - 因为它将命令逻辑全部保存在一个对象中,并且因为它可用于防止发生 Execute
调用在 RelayCommand
中。这就是为什么我很乐意尝试修复我们发现的 mvvmcross 绑定(bind)中的 CanExecute
错误。
关于c# - 如何将 CanExecute 与 Mvvmcross 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12951733/
我必须在 WPF 应用程序中使用此命令(我真的不喜欢它,但如果我必须这样做 -> 我必须这样做): http://wpftutorial.net/DelegateCommand.html 但我在这里遇
我有一个带有文本框和按钮的表单。 当该文本框的值发生变化时,按钮命令不会调用其命令的 CanExecute 方法。 命令参数已设置但似乎没有更改。加载窗口后,该按钮保持禁用状态。 我知道绑定(bi
在演示中,我有一个按钮来切换 bool 字段 isAsking。我创建了一个只有在 isAsking==true 时才能执行的命令。 一旦我按下 Toggle 按钮,okButton.IsEnable
在我的应用程序中,我有一个命令,我只希望用户能够在它尚未运行时触发。有问题的命令绑定(bind)到 WPF 按钮,这意味着如果 CanExecute 为 false,它会自动禁用该按钮。到目前为止一切
我有一个带有按钮的简单程序,该按钮绑定(bind)到 View 模型中的 Relaycommand,如下所示。我根据某个值将 CanExecute 设置为 true(由计时器设置,您可以在下面找到详细
我在我的 WPF 应用程序中使用 MVVM 模式。我正在尝试缓存我的窗口以提高性能。为此,我从不关闭它们,只是隐藏而不是关闭。所有隐藏的窗口都存储在字典中,因此我可以重复使用它们。当窗口再次打开时,我
我正在使用@Stephen-Cleary AsyncCommand implementation在 WPF (.NET 4.0) 中,现在我试图找出如何在命令定义期间指定 CanExecute 处理程
我有一个命令,检查 CanExecute 需要花费很多时间。现在,我问我,是否可以异步运行 CanExecute 方法? 最佳答案 嗯,这是可能的。您应该使用 CanExecutedChanged。在
我无法让 RelayCommand 正确启用/禁用附加控件。 我有一个附加到按钮的 EventToCommand 元素。该命令数据绑定(bind)到 ViewModel。最初,该按钮被禁用(预期行为)
好的。这是场景。这是 WPF + MVVM (.net 4.0) 应用程序: View:有一个 DataGrid 和两个按钮 Move Up/Move Down,它们应该在 DataGrid 中向上或
这个问题已经有答案了: In Java what exactly does File.canExecute() do? (3 个回答) 已关闭 9 年前。 我正在使用此代码来测试它; public c
快速记录,这样我就不会浪费任何人的时间。从 nuget 安装 MVVMLight 时,我最终收到错误 null : The term 'null' is not recognized as the n
我将控件绑定(bind)到 DelegateCommand,但它的 CanExecute 部分无法正常工作。我正在使用 Prism 库。谁能告诉我为什么? 命令声明和实例化: public Playe
我在 XAML 中有一个数据网格和保存按钮。我有一个绑定(bind)到数据网格的 ObservableCollection。 如果我在数据网格中添加/删除一行,我应该能够启用“保存”按钮以允许用户保存
我正在尝试使用 Caliburn Micro CanExecute 方法根据是否在文本框中输入值来绑定(bind)我的保存按钮是否被禁用。 这是我的看法: 我的POCO: [ImplementPr
我有一个应用程序,它在 MVVM 架构中使用 RelayCommand。 似乎在某个时间点,CanExecute 方法不再得到正确的重新评估。 (也许安装 VS2013 的最新更新导致了这个?)。 下
我正在使用 MVVM 在 WPF 中开发应用程序,但我被 ICommand 对象困住了。 我有一个包含一些按钮的窗口,因此,我将它们绑定(bind)到 XAML 中各自的 ICommand,如下所示:
我有一个非常简单的应用程序,其中包含一个 TextBox 和一个 Button。当输入到 TextBox 中的文本长度超过 5 个字符时,该按钮将被启用。这是我的 ViewModel 的代码: pri
在我的窗口中,我有加载和保存方法的按钮。我使用 CommandBinding 并且保存按钮有一个 CanExecute 属性来防止用户在加载数据之前保存数据。 CanExecute-Methode 连
我有以下命令: StartProductionCommand = new RelayCommand(OpenConnection, CanStartProduction); private bool
我是一名优秀的程序员,十分优秀!