2

My project is utilizing MVVM with C#. I've bounded my button command to a RelayCommand, and I wish to get information about my button. I wish to get this information so that I can use it in my RelayCommand. Unfortunately I do not know how to send this information to my RelayCommand, nor do I know which EventArgs I need to receive in my RelayCommand to get this Information.

<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>

The ShielGear contains a Path element which the button takes it shape after. The RelayCommand I've bounded the command to is:

 AddGearCommand = new RelayCommand<T>(addGear);


    private void addGear(T e)
    {

    }

Furthermore is it possible to parse more than one Type to the relaycommand? I am also unsure if I should use Commandparameters?

4

3 に答える 3

2

に名前を追加すると、パラメーターとして送信するためにListBox使用できますCommandParameterSelectedIndex

<ListBox x:Name="myListBox" ...>

あなたのコマンドで

<Button BorderBrush="Transparent" BorderThickness="0" Command="{Binding DataContext.AddGearCommand, ElementName=MyLB}" CommandParameter="{Binding ElementName=myListBox, Path=SelectedIndex}">

次に、RelayCommand宣言は次のようになります。

public RelayCommand<int> AddGearCommand { get; set; }

そしてあなたのコマンドで:

AddGearCommand = new RelayCommand<int>(selectedIndex =>
{
     // do whatever you want
});

お役に立てれば

于 2013-10-14T08:42:37.240 に答える
2

ViewModel からボタン (UI 要素) にアクセスするべきではありません。これは関心の分離を壊しており、後で UI をリファクタリングする必要がある場合、作業が困難になります。

代わりに、必要なデータをコマンドに渡すボタン バインディングに値を追加します。多くの場合、これは listboxitem にバインドされたオブジェクトになります。

<Button Command="{Binding DataContext.AddGearCommand, ElementName=MyLB}" CommandParameter="{Binding}">

次に、データ要素の実際の型で入力されるように RelayCommand を変更する必要があります。

public RelayCommand<myDataType> AddGearCommand { get;set;}
于 2013-10-14T08:45:38.987 に答える