まず第一に、これは SO に関する私の最初の投稿ですので、お手柔らかに ;)
私は非常に単純な WPF アプリケーションを使用しており、メニューには 2 つのオプションがあり、いくつかのボタンは異なるビューにあります。これらのほとんどには、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 の実装の違いがわかりません。