【发布时间】:2016-09-14 11:04:10
【问题描述】:
我的问题是如何知道点击了哪个按钮。我的按钮绑定到 ObservableCollection 类型的属性,该属性包含 Item 类型的对象,当单击按钮时,我需要在 ViewModel 中使用该对象。任何想法如何知道单击了哪个按钮?我有几个想法,比如发送多个命令参数(1.SelectedItems from ListBox 2.The Object from the button)或在单击按钮后将按钮中的对象绑定到 ViewModel 中的另一个 Item 类型的属性以使用它.任何想法都会受到赞赏。
我有这个用于按钮的 DataTemplate
<DataTemplate x:Key="ButtonTemplate">
<WrapPanel>
<Button x:Name="OrderButton"
FontSize="10"
Height="80" Width="80"
Content="{Binding Name}"
Command="{Binding OrderCommand,
Source={StaticResource OrderViewModel}}"
CommandParameter="{Binding ElementName=ListBoxUserControl, Path=SelectedItems}">
</Button>
</WrapPanel>
</DataTemplate>
我的视图模型
public class OrderViewModel : ObservableCollection<Order>, INotifyPropertyChanged
{
public CreateOrderCommand CreateOrderCommand { get; set; }
public ObservableCollection<Item> Data { get; set; }
public OrderViewModel()
{
this.CreateOrderCommand = new CreateOrderCommand(this);
DataObservableCollection data= new DataObservableCollection();
Data = data;
}
}
我像这样填充我的按钮
<WrapPanel x:Name="OrderButtons">
<ItemsControl ItemTemplate="{StaticResource ButtonTemplate}"
ItemsSource="{Binding Data, Source={StaticResource OrderViewModel}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal">
</WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</WrapPanel>
【问题讨论】:
-
请描述你的意图,而不是你试图解决它的方式,参考meta.stackexchange.com/questions/66377/what-is-the-xy-problem。在 MVVM 中,您不应该关心 ui 控件是什么。你的视图模型应该被设计成可以按照你的意愿处理事情。
-
我想在我的 ViewModel 中使用 Button 的数据上下文,并从同一个 Button 的另一个控件发送 CommandParameter。