3

まず第一に、これは 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 の実装の違いがわかりません。

4

2 に答える 2