Hierarchische Daten mit verschachtelten Listviews in WPF Bindung

stimmen
1

Ich habe einige Daten, die eine Detailtabelle hat. Ich möchte, dass die Daten in einem Listview präsentiert werden. Ich mag, dass die Detaildaten als verschachtelte Listview angezeigt, wenn Sie ein Element in der ursprünglichen Liste. Ich kann nicht scheinen, um herauszufinden, wie die Daten erhalten Bindung zu arbeiten.

Hier ist , was ich bisher, (das Problem ist das {Binding Path=FK_History_HistoryItems}):

<ListView Name=lstHistory ItemsSource={Binding Source={StaticResource History}} SelectionChanged=lstHistory_SelectionChanged>
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding={Binding Path=Name} Header=Name Width=100 />
            <GridViewColumn DisplayMemberBinding={Binding Path=Description} Header=Description Width=150 />
            <GridViewColumn DisplayMemberBinding={Binding Path=Total, Converter={StaticResource moneyConvert}} Header=Total Width=100 />
            <GridViewColumn DisplayMemberBinding={Binding Converter={StaticResource categoryAggregate}} Header=Categories Width=100 />
        </GridView>
    </ListView.View>
    <ListView.Resources>
        <Style TargetType={x:Type ListViewItem}>
            <Setter Property=Template>
                <Setter.Value>
                    <ControlTemplate TargetType={x:Type ListViewItem}>
                        <Border>
                            <StackPanel>
                                <Border Name=presenter
                                        Background={TemplateBinding Background}
                                        BorderBrush={TemplateBinding BorderBrush}
                                        BorderThickness={TemplateBinding BorderThickness}
                                        Padding={TemplateBinding Padding}>
                                    <GridViewRowPresenter />
                                </Border>
                                <Border Name=details Visibility=Collapsed Margin=5
                                        BorderBrush=Black BorderThickness=2>
                                    <StackPanel Margin=5>
                                        <ListView ItemsSource={Binding Path=FK_History_HistoryItems}>
                                            <ListView.View>
                                                <GridView>
                                                    <GridViewColumn DisplayMemberBinding={Binding Path=Ammount} Header=Ammount Width=100 />
                                                    <GridViewColumn DisplayMemberBinding={Binding Path=Category} Header=Category Width=100 />
                                                </GridView>
                                            </ListView.View>
                                        </ListView>
                                    </StackPanel>
                                </Border>
                            </StackPanel>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property=IsSelected Value=True>
                                <Setter TargetName=details Property=Visibility Value=Visible />
                                <Setter TargetName=presenter Property=Background Value=Navy/>
                                <Setter TargetName=presenter Property=TextElement.Foreground Value=White />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.Resources>
</ListView>
Veröffentlicht am 09/12/2008 um 19:03
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
1

Wenn ich Ihre Frage richtig verstanden müssen Sie die SelectedItem der ursprünglichen Liste binden:

<ListView ItemsSource="{Binding ElementName=lstHistory, Path=SelectedItem}">

Und legen Sie dann die Datatemplate / Ansicht nach Bedarf. Wenn Sie Elementname nicht verwenden möchten, für die Bindung auch Relative verwenden könnte, aber ich finde, ist Element leichter zu lesen und zu verstehen.

Beantwortet am 09/12/2008 um 20:27
quelle vom benutzer

stimmen
0

Sie müssen Ihr Problem Zeile wie folgt ändern:

<ListView ItemsSource="{Binding FK_History_HistoryItems}">

Mit dieser Änderung funktioniert die Steuerung schön. Ich habe gearbeitet etwas ähnliches ohne Erfolg. Ich mag deine Arbeit auf das wirklich.

Beantwortet am 31/01/2009 um 00:33
quelle vom benutzer

stimmen
0

Um den Auslöser zur Arbeit zu kommen, werden Sie müssen die Controltarget setzen:

<ControlTemplate TargetType="{x:Type ListViewItem}">

Ohne die Target (als selektierbarer Typ) angegeben, wird das Rendering XAML verwechselt werden ...

Beantwortet am 07/10/2015 um 14:50
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more