首先,这是我在 SO 上的第一篇文章,所以要温柔;)
我有一个非常简单的 WPF 应用程序,其菜单包含两个选项和不同视图中的一些按钮,其中大多数都与 Microsoft.TeamFoundation.MVVM.RelayCommand 数据绑定。在我的计算机上调试时一切正常,在运行内置的 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 构建。其他数据绑定,比如上面的 IsEnabled 和各种文本属性,似乎工作正常。
请告诉我是否可以提供任何其他信息!
更新:我自己实现了 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 的实现有什么区别。