2017-10-11 132 views
1

我有食谱类的可观察到的集合和一个命令SearchResultsViewModel显示的食谱:如何判断哪个按钮被点击,动态生成? (MVVM)

private ObservableCollection<Recipe> _searchedRecipes; 
    public ObservableCollection<Recipe> SearchedRecipes 
    { 
     get 
     { 
      return _searchedRecipes; 
     } 
     set 
     { 
      _searchedRecipes = value; 
      OnPropertyChanged(); 
     } 
    } 
    #endregion 

    #region Show Recipe Command 

    public ICommand ShowRecipeCommand { get { return new RelayCommand(() => 
    ExecuteShowRecipeCommand()); } } 

    public void ExecuteShowRecipeCommand() 
    { 
     _locator.Main.CurrentViewModel = new DisplayRecipeViewModel(); 
    } 
    #endregion 

另一个视图模型执行的查询,并且在这个视图模型的构造传递结果。 在SearchResultsViewModel的XAML部分中,结果以动态方式显示为按钮。每个配方是与它一个按钮的名称内容:

 <StackPanel> 
      <ItemsControl ItemsSource="{Binding Path = SearchedRecipes}"> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Button Content="{Binding Path=Name}" Command="{Binding ShowRecipeCommand}"/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </StackPanel> 

我想ShowRecipeCommand创建新DisplayRecipeViewModel用绑定了一个视图,显示被点击方的属性,但我不知道如何 告诉哪个按钮被点击。 是否有可能在没有代码的情况下执行此操作?

+2

通过'CommandParameter'传递你需要的任何东西?我不知道你的'RelayCommand'实现是否支持这个场景(它应该),但最坏的情况是你自己实现'ICommand'。 – Maverik

+1

将命令属性移动到食谱类? – mm8

+0

@ mm8从数据库生成模型时可以这样做吗? –

回答

0

您可以将命令属性移动到Recipe类。然后每个Button(或者每个数据对象由Button表示)都有自己的命令,并且您始终知道哪个被点击。

如果Recipe类是由某些ORM(例如Entity Framework)自动生成的,则可以在其中定义命令属性的另一部分类。

相关问题