C# XAML 主从绑定不起作用

C# XAML Master Detail Binding does not work

我想在带有主从视图的 ListView 中显示一个列表。主视图工作正常,但绑定到详细视图不起作用。我做错了什么?

隐藏代码:

DataContext = new VirtualizingCollection<LinesSummary>(fs, 100)

行摘要Class:

public class LinesSummary {

     public string dateString { get; set; }
}

XAML:

    <StackPanel>
        <ListView Margin="5" Style="{DynamicResource lvStyle}" Height="200" x:Name="Master"/>
        <ListView Margin="5" Style="{DynamicResource lvStyle_Detail}" Height="200" x:Name="Detail"/>
    </StackPanel>

母版视图的动态资源:

        <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
        <Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
        <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="True"/>
        <Setter Property="ListView.ItemsSource" Value="{Binding}"/>
        <Setter Property="ListView.View">
            <Setter.Value>
                <GridView>
                    <GridViewColumn Header="Date" Width="100">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding dateString}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </Setter.Value>
        </Setter>
    </Style>

详细视图的动态资源:

    <Style x:Key="lvStyle_Detail" TargetType="{x:Type ListView}">
        <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
        <Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
        <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="True"/>
        <Setter Property="ListView.ItemsSource" Value="{Binding ElementName=Master, Path=SelectedItem.LinesSummary}"/>
        <Setter Property="ListView.View">
            <Setter.Value>
                <GridView>
                    <GridViewColumn Header="aaa" Width="100">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding dateString}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </Setter.Value>
        </Setter>
    </Style>

一个ListViewItemsSource只能绑定到一个IEnumerable 所以即使你绑定了第二个[=的ItemsSource 属性 14=] 像这样是行不通的:

ItemsSource="{Binding ElementName=Master, Path=SelectedItem}"

...因为 LinesSummary 不是 IEnumerable.

由于在Master中最多只能选择一项,你不妨绑定一个TextBlock到其[=23]的dateString属性 =]:

<StackPanel>
    <ListView Margin="5" Style="{DynamicResource lvStyle}" Height="200" x:Name="Master"/>
    <ListView Margin="5" Style="{DynamicResource lvStyle_Detail}" Height="200" x:Name="Detail">
        <ListViewItem>
            <TextBlock Text="{Binding Path=SelectedItem.dateString, ElementName=Master}" />
        </ListViewItem>
    </ListView>
</StackPanel>

lvStyle_Detail 中删除此 setter:

<Setter Property="ListView.ItemsSource" Value="{Binding ElementName=Master, Path=SelectedItem.LinesSummary}"/>