2012-02-26 95 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

在棱鏡的DelegateCommand或MVVM光的RelayCommand實施:

+0

謝謝,看起來很不錯:)我只有問題,XAML無法找到我的命令。我在ViewModel中創建了一個公共的RelayCommand,我試圖用 這個結果來調用它 此結果來自百度翻譯,長句或段落建議您使用翻譯系統的組件在一個錯誤「無法解析符號'OpenItemCommand'」。 – 2012-02-26 17:21:08

+0

將視圖的DataContext設置爲您的視圖模型,例如public MyView(){InitializeComponent(); DataContext = new ViewModel(); }。或者在xaml中進行。 – Phil 2012-02-26 18:35:58

1

p => OpenItem(p) 

這正是p代表取代

p => OpenItem(_HOW_DO_I_GET_THE_PARAMETER?_) 

。有了這些,你會寫這樣的代碼:

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

哦,我有多愚蠢。謝謝!得到它現在工作我猜:) – 2012-02-26 15:32:10

相關問題