- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,这是我在 SO 上的第一篇文章,所以要温和 ;)
我有一个非常简单的 WPF 应用程序,它有一个带有两个选项的菜单和一些位于不同 View 中的按钮,其中大部分都具有到 Microsoft.TeamFoundation.MVVM.RelayCommand 的数据绑定(bind)。在我的电脑上调试时一切正常,在运行构建的 exe 时它工作正常,在我同事的电脑上构建的版本工作正常,但是在我办公室的另一台电脑上测试时 没有这些 RelayCommands 会火...
XAML:
//Menu item
<MenuItem Header="Quit" Command="{Binding QuitCommand}" />
//Button
<Button Content="Update" Command="{Binding UpdateCommand}"
IsEnabled="{Binding Ready}" Height="30" />
C#:
//Menu item
public ICommand QuitCommand
{
get
{
return new RelayCommand(() => Quit());
}
}
//Button
public ICommand UpdateCommand
{
get
{
return new RelayCommand(() => Update());
}
}
关于计算机的一些信息:
My computer: Win8 Pro 64, .NET 4.5
My colleagues computer: Win7 Pro 64, .NET 4.5
Office computer: Win7 Pro 32, .NET 4.5
该解决方案是为目标框架 4.5 和处理器架构 x86 构建的。其他数据绑定(bind),如上面的 IsEnabled 绑定(bind)和各种文本属性,似乎工作正常。
如果我可以提供任何其他信息,请告诉我!
更新:我自己实现了 RelayCommand,效果很好:
public class RelayCommand : ICommand
{
readonly Action<object> mExecute;
readonly Predicate<object> mCanExecute;
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
mExecute = execute;
mCanExecute = canExecute;
}
public RelayCommand(Action<object> execute)
{
if (execute == null)
throw new ArgumentNullException("execute");
mExecute = execute;
mCanExecute = delegate { return true; };
}
public RelayCommand(Action execute)
{
if (execute == null)
throw new ArgumentNullException("execute");
mExecute = new Action<object>(param => execute());
mCanExecute = delegate { return true; };
}
public bool CanExecute(object parameter)
{
return mCanExecute == null ? true : mCanExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
mExecute(parameter);
}
}
我不知道我的实现与 TeamFoundation 的实现有何区别。
最佳答案
不确定这是否可以帮助您,但我遇到了类似的问题并通过在命令初始化期间显式触发 PropertyChanged 事件解决了这个问题:
base.RaisePropertyChanged("QuitCommand");
当然,只有当您有一个实现了 INotifyPropertyChanged
接口(interface)的基类时,上述方法才可用。你可以捕获它,例如来自 Josh Smith 的 MVVM Foundation框架。
完整的示例代码如下:
private ICommand _quitCommand;
//Menu item
public ICommand QuitCommand
{
get { return _quitCommand; }
private set
{
if (value == _quitCommand) return;
_quitCommand = value;
base.RaisePropertyChanged("QuitCommand");
}
}
public MyViewModel()
{
QuitCommand = new RelayCommand(() => Quit());
}
这里有趣的是,我很确定您的原始代码在一段时间前对我来说运行良好(不同的机器、环境、操作系统等)。
在特定情况下,似乎某些东西阻止了 View 类在 ViewModel 创建/启动过程中读取命令(?)属性。这需要您手动告诉 View 它应该读取目标 ViewModel 属性。
关于c# - RelayCommand 在某些计算机上不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16857547/
有谁知道为什么特定于 MVVM Light RelayCommand 通用类型会导致其 canExecute 始终解析为 false 以进行绑定(bind)?为了获得正确的行为,我必须使用一个对象,然
使用 RelayCommand 时如何获取事件发送者? 最佳答案 这是那些令人痛苦的 %¤# 答案之一,我实际上并没有回答您的问题,而是教导您应该以不同的方式做些什么。所以,很抱歉。开始: 如果您发现
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: Passing two command parameters using a WPF binding 我需要向我的
我的 ViewModel 中有以下内容: public MyViewModel() { CloseCommend = new RelayCommand(closeWindow); } public
我已经在这个问题上停留了几个小时。我正在尝试在 WPF 中实现 MVVM 样式的 Word 加载项。我没有使用 MVVM 工具包。我有一个停靠在 WinForm 中的 WPF 用户控件。虽然我能够在
我将 MVVM 灯用于 WPF 应用程序。我有一个 View 模型,其中包含几个使用 RelayCommand 的命令。由于每个命令的代码都非常相似,因此我创建了一个 GetCommand 方法。但是
我正在寻找 RelayCommand 的实现。我认为最初的实现是经典的(我们称之为实现A) public class RelayCommand : ICommand { priv
首先,这是我在 SO 上的第一篇文章,所以要温和 ;) 我有一个非常简单的 WPF 应用程序,它有一个带有两个选项的菜单和一些位于不同 View 中的按钮,其中大部分都具有到 Microsoft.Te
我正在读这个 MSDN Article关于 MVVM。我目前正在查看图 #15 中的 RelayCommand。假装我想测试这个 SaveCommand。我该怎么做?我正在使用 NUnit 和 Rhi
我想包括 RelayCommands。我想为 System.Windows.Input 创建一个程序集以使用 ICommand,但该程序集不可用?那里出了什么问题?我已经安装了 .net framew
我正在尝试使用来自 Galasoft MVVMLight 的 RelayCommand 执行 RelayCommand(在我的代码隐藏中)。 MainPage.xaml.cs public MainP
我需要更改我们编写的 WPF 应用程序中的某些功能。我们使用 MVVM Light 来实现 MVVM。每当我们需要将一些参数传递给我们使用 MVVM Light 的 Messenger 类的方法时。我
我知道 SOF 和 Google 上有多个标题相似的帖子,但请耐心等待一分钟。 我正在按照这篇文章为我的 gridview 创建上下文菜单:http://www.koaxkoaxkoax.com/ri
我在 TextBox 中有一个按钮。我想为我的按钮绑定(bind)命令。但是当我点击按钮时它不起作用。这是 App.xaml 中的文本框模板:
我在使用 GalaSoft 的 RelayCommand 时遇到了一些问题。 我有一个有效的 NextCommand 属性,但只有几次。 之后,它就完全停止工作了。 您可以使用示例项目进行尝试: ht
我最近在 WPF 中进行了大量编程,但此时我的 View 和 ViewModel 并没有分开。好吧,这是部分的。我所有与文本框中的文本、标签内容、数据网格中的列表等相关的绑定(bind)都是由带有 N
我正在使用 RelayCommand 来处理按钮单击,我需要获取 sender 参数但它始终为空,知道为什么吗? View 模型.cs private RelayCommand _expand
我正在实现一个带有执行和 canExecute 部分的 RelayCommand。 RelayCommand 在没有 canExecute 部分时工作,但是当我添加 canExecute 部分时,命令
我正在应用 Josh Smith 的 MVVM 模式并且遇到了困难。我一直在这里研究这个问题,但似乎无法完全正确地使用语法。 在我看来,下面的代码符合所需的语法,但 Visual Studio 报告错
我正在 WPF 中构建一个 MVVM 应用程序,并将一个 Menu 绑定(bind)到一个 MenuItem 模型。我的 MenuItem 类具有以下属性: public class MenuItem
我是一名优秀的程序员,十分优秀!