Enlace de datos jerárquico con ListViews anidados en WPF

votos
1

Tengo algunos datos que tienen una tabla de detalles. Quiero que los datos se presenten en un ListView. Quiero que los datos de detalles aparezcan como ListView anidado cuando seleccionas un elemento en la lista original. Parece que no puedo entender cómo hacer que el enlace de datos funcione.

Esto es lo que tengo hasta ahora, (el problema es el {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 el 09/12/2008 a las 19:03
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
1

Si entiendo su pregunta correctamente, debe enlazar al SelectedItem de la lista original:

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

Y luego configure el datatemplate / view según sea necesario. Si no desea usar ElementName para el enlace, también puede usar RelativeSource, pero creo que ElementName es más fácil de leer y comprender.

Respondida el 09/12/2008 a las 20:27
fuente por usuario

votos
0

Con el fin de obtener un disparo al trabajo, usted tendrá que configurar el ControlTemplate TargetType:

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

Sin TargetType se especifica (como un tipo seleccionable), la prestación XAML será confundido ...

Respondida el 07/10/2015 a las 11:50
fuente por usuario

votos
0

Debe cambiar su línea de problema a lo siguiente:

<ListView ItemsSource="{Binding FK_History_HistoryItems}">

Con ese cambio, el control funciona maravillosamente. He estado trabajando en algo similar en vano. Me gusta mucho tu trabajo en esto.

Respondida el 31/01/2009 a las 00:33
fuente por usuario

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