none
Binding ListView的Items Count 问题 RRS feed

  • 问题

  • 做了个小Demo

    界面上有个TextBlock和一个ListView,TextBolck绑定ListView的Item.Count属性,然后再后台代码修改ListView数据源,可是TextBlock没有任何反应,显示的一直是0 可是ListView已经显示出了数据

    这个是为啥呢???

    代码如下,求指教。

            <StackPanel Orientation="Horizontal">
                <TextBlock Name="tb" Text="{Binding ElementName=lv,Path=Items.Count,Mode=OneWay}"/>
            </StackPanel>
    
            <ListView Name="lv" Grid.Row="1">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}" Foreground="Red" FontSize="20"/>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

            private ObservableCollection<Doctor> Data;
            public TestPage()
            {
                this.InitializeComponent();
    
                Data = new ObservableCollection<Doctor>();
                lv.ItemsSource = Data;
    
                InitData();
            }
    
            private void InitData()
            {
                for (int i = 0; i < 10; i++)
                {
                    Data.Add(new Doctor() { Name = "Jack" + i });
                }
            }


    • 已编辑 Seraph89 2012年8月30日 10:26
    2012年8月30日 10:25

答案

  • ListView.Items并不是一个依赖属性,也没有为他实现NotifyPropertyChanged, 而他的Count也没有实现NotifyPropertyChanged,所以是不会通知绑定更新的。请直接绑定 ItemsSource

    <TextBlock Name="tb" Text="{Binding ElementName=lv,Path=ItemsSource.Count,Mode=OneWay}"/>

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Seraph89 2012年9月5日 7:22
    2012年8月31日 8:38
    版主