Laden...

[gelöst] Button Command Binding in DataTemplate

Erstellt von Pippl vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.583 Views
P
Pippl Themenstarter:in
40 Beiträge seit 2011
vor 10 Jahren
[gelöst] Button Command Binding in DataTemplate

Hallo,

ich sitze gerade an einen kniffligen Problem und bin bisher auf noch keine Lösung gekommen X(

Folgende Problemstellung:

Ich habe in einem UserControl eine ListBox definiert. Diese bekommt die Items per Binding gesetzt.
Um die Daten wie gewünscht bekommt die ListBox auch noch einen ItemContainerStyle gesetzt.
In diesem Style wird per Trigger entschieden welches der 2 DataTemplates verwenden wird (das selektierte Item wird mit mehr Daten angezeigt als die anderen). In einem der DataTemplates gibt es nun einen Button dem ich ein Command binden will.
Das Problem das Command, welches ich binde wird bei jedem Wechsel des ListBoxItem aufgerufen und nicht beim Button Klick.

Hier das XAML (nur auf das entsprechende Template und die ListBox Definition begrenzt)

    <UserControl.Resources>
        <DataTemplate x:Key="ItemTemplate">
// wie das DataTemplate SelectedItemTemplate aufgebaut aber ohne innere ListBox und Button
        </DataTemplate>

        <DataTemplate x:Key="SelectedItemTemplate">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition />
                    <RowDefinition />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>

                <Label Grid.Row="0" Grid.RowSpan="2" Content="{Binding Id}" />
                <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal">
                    <Label Content="{Binding Firstname}" />
                    <Label Content="{Binding Secondname}" />
                    <Image Source="{Binding GenderIcon}" Height="16" Width="16" />
                </StackPanel>
                <Label Grid.Row="1" Grid.Column="1" Content="{Binding NoteShort}" />
                <ListBox ItemsSource="{Binding Records}" Grid.Row="2" Grid.ColumnSpan="2">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Label Content="{Binding Id}" />
                                <Label Content="{Binding PlayDate}" />
                                <Label Content="{Binding Role}" />
                                <Label Content="{Binding Note}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
// hier binde ich das gewünschte Command
                <Button Grid.Row="3" Content="Details" Margin="2.5" Width="80"
                        Command="{Binding ShowActorDetails}"/>
            </Grid>
        </DataTemplate>

        <Style TargetType="{x:Type ListBoxItem}" x:Key="ContainerStyle">
            <Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}" />
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="ContentTemplate" Value="{StaticResource SelectedItemTemplate}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </UserControl.Resources>

............

        <ListBox x:Name="ActorListBox" Grid.Row="1" ItemsSource="{Binding Actors}" ItemContainerStyle="{StaticResource ContainerStyle}" />

So nun zur Frage .... warum wird das Command nicht beim Button Klick aufgerufen, sondern wenn ich das Item in der ListBox wechsel?

Ich hoffe das Problem ist verständlich geschrieben und es kann jemand weiterhelfen 🙂

MfG Sebastian

5.299 Beiträge seit 2008
vor 10 Jahren

kann man glaub nix zu sagen - du müsstest allenfalls eine TestAnwendung anhängen, die den Fehler reproduziert.

Der frühe Apfel fängt den Wurm.

P
Pippl Themenstarter:in
40 Beiträge seit 2011
vor 10 Jahren
Gelöst

Beim Reduzieren der Solution auf das Wesentliche, hat sich gezeigt das es doch wie gewünscht funktioniert.
Ich glaub das Problem lag einfach an der Uhrzeit 😉