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

相关问题