我有一个SearchResultsViewModel,带有可观察的食谱类集合和一个显示食谱的命令:
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
另一个ViewModel执行查询并在此ViewModel的构造函数中传递结果。 在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,并绑定一个View,显示已点击的Recipe的属性,但我不知道如何 告诉我点击了哪个按钮。 是否可以在没有代码的情况下执行此操作?
答案 0 :(得分:0)
您可以将命令属性移动到Recipe
类。然后每个Button
(或者更确切地说,由Button
表示的每个数据对象)都有自己的命令,并且您始终知道哪个被点击了。
如果某些ORM(例如Entity Framework)自动生成Recipe
类,则可以创建另一个用于定义命令属性的分部类。