dados hierárquicos de ligação com ListViews aninhados no WPF

votos
1

Eu tenho alguns dados que tem uma tabela de detalhes. Eu quero que os dados a serem apresentados em um ListView. Eu quero os dados detalhados para aparecer como um ListView aninhado quando você seleciona um item na lista original. Eu não consigo descobrir como obter os dados de ligação para o trabalho.

Aqui está o que eu tenho até agora, (o problema é a {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>
Publicado 09/12/2008 em 19:03
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Se eu entendi sua pergunta você precisa para se ligar ao SelectedItem da lista original:

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

E, em seguida, definir o datatemplate / vista conforme necessário. Se você não quiser usar ElementName para a ligação você também pode usar RelativeSource mas acho ElementName é mais fácil de ler e compreender.

Respondeu 09/12/2008 em 20:27
fonte usuário

votos
0

A fim de obter o gatilho para trabalhar, você precisará definir o ControlTemplate TargetType:

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

Sem o TargetType sendo especificado (como um tipo selecionável), a prestação XAML será confuso ...

Respondeu 07/10/2015 em 14:50
fonte usuário

votos
0

Você precisa mudar sua linha de problema ao seguinte:

<ListView ItemsSource="{Binding FK_History_HistoryItems}">

Com essa mudança, o controle funciona lindamente. Tenho vindo a trabalhar em algo semelhante sem sucesso. Eu realmente gosto de seu trabalho sobre este assunto.

Respondeu 31/01/2009 em 00:33
fonte usuário

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