我在这里尝试做的是将按钮包含的对象绑定到我的ViewModel中的属性以便使用它,但无法解决我的问题。我读到了Tag属性,但无法完全理解它的绑定方式以及如何使用它。
我的按钮:
<DataTemplate x:Key="Template">
<GroupBox>
<WrapPanel>
<Button x:Name="Button"
FontSize="10"
Height="80" Width="80"
Content="{Binding Name}"
</Button>
</WrapPanel>
</GroupBox>
</DataTemplate>
我使用ObservableCollection
中的数据填充我的按钮<WrapPanel x:Name="OrderButtons"
VerticalAlignment="Bottom">
<ScrollViewer x:Name="OrderButtons1"
Margin="3">
<ItemsControl
ItemTemplate="{StaticResource OrderTemplate}"
ItemsSource="{Binding Source={StaticResource ObservableCollectionWithData}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal">
</WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</WrapPanel>
我的ViewModel
public class OrderViewModel : ObservableCollection<Order>
{
public Item OrderItem{ get; set; }
public OrderViewModel()
{
}
}
我应该怎么做才能将包含Item类型(我的自定义类)的对象的Button绑定到我的ViewModel的OrderItem属性?
我尝试的是:
<Button x:Name="OrderButton"
FontSize="10"
Height="80" Width="80"
Content="{Binding Name}"
Tag="{Binding OrderItem, Source={StaticResource OrderViewModel}}"
</Button>
答案 0 :(得分:0)
在我看来,你正在创造一个'选择器';即,当单击该按钮时,您希望视图模型的OrderItem属性包含被单击的“项目”。
如果是这种情况,最好使用ListBox,如下所示:
<ListBox ItemsSource="{Binding Source={StaticResource ObservableCollectionWithData}}" SelectedItem="{Binding OrderItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
然后,您还应在ViewModel中实现INotifyPropertyChanged
。
希望它有所帮助。