我的项目是将MVVM与C#结合使用。我已经将按钮命令绑定(bind)到RelayCommand上,并且希望获得有关按钮的信息。我希望获得此信息,以便可以在我的RelayCommand中使用它。不幸的是,我不知道如何将此信息发送到我的RelayCommand,也不知道我需要在RelayCommand中接收哪个EventArgs才能获取此信息。
<ListBox ItemsSource="{Binding Decoration}" x:Name="MyLB">
<ListBox.ItemTemplate>
<DataTemplate>
<Button BorderBrush="Transparent" BorderThickness="0" Command="{Binding DataContext.AddGearCommand, ElementName=MyLB}" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<View:ShielGear/>
</Grid>
<TextBlock Text="HEJ MED DIG LUDER" TextWrapping="Wrap" Grid.Column="1"/>
</Grid>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ShielGear包含一个Path元素,按钮将在其上成形形状。我将命令限制为的RelayCommand是:
AddGearCommand = new RelayCommand<T>(addGear);
private void addGear(T e)
{
}
此外,是否可以将多个Type解析为relaycommand?
我也不确定是否应该使用Commandparameters?
最佳答案
您不应该从ViewModel访问按钮(UI元素)。这打破了关注点的分离,如果您需要重构UI,将使以后的生活变得困难。
而是在按钮绑定(bind)中添加一个值,该值会将您需要的数据传递到命令中。通常,这将是绑定(bind)到您的listboxitem的对象。
<Button Command="{Binding DataContext.AddGearCommand, ElementName=MyLB}" CommandParameter="{Binding}">
然后,您需要修改RelayCommand以使用数据元素的实际类型进行键入。
public RelayCommand<myDataType> AddGearCommand { get;set;}
关于c# - 获取控件的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19356018/