5

ComboBox コントロールの「SelectionChanged」イベントのハンドラーには、次のシグネチャがあります。

void SelectionChangedMethod(object sender, SelectionChangedEventArgs e)

Silverlight 4 および MVVM-Light でそのプロパティを ViewModel オブジェクトの対応するメソッドにバインドする方法は?

私の知る限り、次のようなことをする必要があります。

public void Changed(Object obj, SelectionChangedEventArgs e)
{
    // .... implement logic here
}

RelayCommand<Object, SelectionChangedEventArgs> _command;
public ICommand ObjectSelectionChanged
{
    get
    {
        if (_command == null)
        {
            _command = new RelayCommand<Object, SelectionChangedEventArgs>(Changed);
        }
        return _command;
    }
}

問題は、MVVM-Light フレームワークの RelayCommand クラスが 2 つの汎用パラメーターをサポートしていないことです...

この場合の解決策または回避策はありますか? コントロールイベントを2つのパラメータを持つメソッドにバインドする方法は?

そして別の問題: ComboBox には、このコマンドをバインドするための "Command" プロパティがありません..? ViewModel へのイベントを取得するにはどうすればよいですか?

ありがとう。

PSコンボボックスのSelectedItemプロパティを使用しようとしましたが、ComboBoxの実装が正しくないようで、機能しません...

4

1 に答える 1

25

SelectedChangedEvent を接続しようとするよりもはるかに簡単な方法があります。

試す...

<ComboBox ItemsSource={Binding Path=Names} SelectedItem={Binding Path=SelectedName, Mode=TwoWay}>

public class ViewModel : ViewModelBase
{
    private string _selectedName;
    public string SelectedName
    {
        get { return _selectedName; }
        set
        {
            if (_selectedName == value) return;
            _selectedName = value;
            RaisePropertyChanged("SelectedName");
        }
    }
}

あなたが行っていた方法でそれを行うことは可能です

<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding MyCommand}" PassEventArgsToCommand="True"/>

コマンドは「SelectionChangedEventArgs」タイプの RelayCommand である必要があります

于 2010-05-29T03:28:46.790 に答える