2012-02-26 12 views
0

実行時に現在のビューを切り替えるコマンドがあります。私はこのように私のボタンには、このコマンドをバインドさ:CommandParametersをViewModelに渡すにはどうすればよいですか?

<Button Style="{StaticResource TextButton}" Command="{Binding ViewModel:MainViewModel.OpenItemCommand}" CommandParameter="{Binding Link}"/> 

私は、コマンドへのリンク(現在選択されている記事のリンク)を渡したいです。私のコマンドは次のように定義されています。私のViewModelで

は、私はこれを持っている:

public ICommand OpenItemCommand 
{ 
    get 
    { 
     if (_openItemCommand == null) 
     { 
      _openItemCommand = new Command.Command(
       p => true, 
       p => OpenItem(_HOW_DO_I_GET_THE_PARAMETER?_) 
      ); 
     } 
     return _openItemCommand; 
    } 
    set 
    { 
     if (_openItemCommand != value) 
     { 
      _openItemCommand = value; 
      RaisePropertyChanged("OpenItemCommand"); 
     } 
    } 
} 

private void OpenItem(Uri link) 
{ 
    throw new NotImplementedException(); 
} 

私はExecuteメソッドにコマンドパラメータ(リンク)を渡す必要があるコマンドを作成する場合。しかし、どのように私はこれの価値を得るのですか? XAMLでCommandParameterを定義しましたが、アクセス方法はわかりません。

私は実際に膨大なウェブサイトを検索しましたが、本当に答えは見つかりません。

答えて

1

。これらを使用すると、このようなコードを記述します。

この場合
public class ViewModel 
{ 
    public ViewModel() 
    { 
     OpenItemCommand = new RelayCommand<string>(OpenItem); 
    } 

    public RelayCommand<string> OpenItemCommand { get; private set; } 

    private void OpenItem(string link) 
    { 
     Debug.WriteLine(link); 
    } 
} 

stringは、パラメータのタイプです。

リンクパラメータがどこから来ているのかわかりませんが、コントロールからのものであれば、コントロールの値をビューモデルのプロパティにバインドできます。たとえば、パラメータは必要ありません:

public class ViewModel 
{ 
    public ViewModel() 
    { 
     OpenItemCommand = new RelayCommand(OpenItem); 
    } 

    public RelayCommand OpenItemCommand { get; private set; } 

    public string Link { get; set; } 

    private void OpenItem() 
    { 
     Debug.WriteLine(Link); 
    } 
} 
+0

ありがとう、非常に良い:)私はXAMLが私のコマンドを見つけることができない問題があります。 ViewModelにPublic RelayCommandを作成しました。

+0

ビューのDataContextをビューモデルに設定します。パブリックMyView(){InitializeComponent(); DataContext =新しいViewModel(); }。またはxamlでやってください。 – Phil

1

何のためpスタンドであること

p => OpenItem(p) 

p => OpenItem(_HOW_DO_I_GET_THE_PARAMETER?_) 

を置き換える:あなたがプリズムのDelegateCommandまたはMVVM光のRelayCommandの実装を見てみなければならないパラメータ

+0

私はどのように愚かですか。ありがとう!それは私が推測する今働いて得た:) –

関連する問題