我的项目是将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/

10-08 20:37