如何在 XAML 中绑定列表视图的项目数

Mis*_*sky 5 xaml binding

我在将计数绑定到文本块时遇到问题。

我有一个列表视图,它的项目绑定到用户对象属性。我想获取绑定的所有项目的数量。

这是我的列表视图:

<ListView ItemsSource="{Binding Users}" x:Name="lvUsers">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ListViewItem IsHitTestVisible="False">
                <StackPanel>
                    <facebookControls:ProfilePicture Height="74" Width="74" ProfileId="{Binding FacebookId}" />
                    <TextBlock Text="{Binding UserName}" FontSize="18" HorizontalAlignment="Center" />
                </StackPanel>
            </ListViewItem>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)

这是我的 TextBlock:

<TextBlock Text="{Binding ElementName=lvUsers, Path=Items.Count, Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我知道如果我的 ListView 没有模板,只有 ListViewItems,它会工作,但我需要它像那样。

den*_*zov 5

覆盖此模板ListView。下面的示例基本上创建了一个样式,它覆盖了控件模板,这样常规ListView项目 (the ItemsPresenter) 被包裹在 the 中,StackPanel以便TextBlock可以在底部添加 with count 或其他任何内容。

<ListView ItemsSource="{Binding Users}">
        <ListView.Style>
            <Style TargetType="{x:Type ListView}">
            <Style.Setters>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Border BorderThickness="1" BorderBrush="LightGray">
                                <StackPanel>
                                    <ScrollViewer>
                                        <ItemsPresenter />
                                    </ScrollViewer>
                                    <TextBlock Margin="0,4" FontWeight="Bold">
                                        <Run Text="Count: "/>
                                        <Run Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Path=Items.Count, Mode=OneWay}"/>
                                    </TextBlock>
                                </StackPanel>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>                    
            </Style.Setters>
        </Style>
        </ListView.Style>
        <ListView.ItemTemplate>
            <DataTemplate>
                <ListViewItem IsHitTestVisible="False">
                    <StackPanel>
                        <facebookControls:ProfilePicture Height="74" Width="74" ProfileId="{Binding FacebookId}" />
                        <TextBlock Text="{Binding UserName}" FontSize="18" HorizontalAlignment="Center" />
                    </StackPanel>
                </ListViewItem>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
Run Code Online (Sandbox Code Playgroud)

  • 你让我工作,同志!!!好吧,我已经发布了模板的更新,经过测试,这有效......祝你好运! (2认同)
  • 哦,好吧,将其更改为您命名为 listview `&lt;ListView x:Name="lv"` 的位置,然后绑定到元素名称,这样就可以了 `&lt;Run Text="{Binding ElementName=lv, Path= Items.Count, Mode=OneWay}"/&gt;` (2认同)