none
ListView 无法取得指定的Listviewitem> RRS feed

  • 问题

  •  您好!

           我在取Listviewitem的时候,使用 ListViewItem lvk = BingMapCityView.ItemContainerGenerator.ContainerFromIndex(2) as ListViewItem ,但无法取得ListViewItem   ,查看ITEMS,是有数据的ContainerFromIndex这里不这是几,都返回NULL,使用ContainerFromITEM,也是一样的效果,请帮助?

    CODE的调用是在BUTTON的单击事件中:

     code:

    Model.TMSAPTranTM mtm = new Model.TMSAPTranTM();
                viewModel = await mtm.BingMapGetCitysByView();
                this.DataContext = viewModel;
                ListViewItem lvk = BingMapCityView.ItemContainerGenerator.ContainerFromIndex(2) as ListViewItem;

    Xaml: 

    <ListView    x:Name="BingMapCityView"
                                BorderBrush="Blue" 
                               BorderThickness="2"
                               ItemsSource="{Binding BingMapView}"
                               ItemTemplate="{StaticResource BingMapListViewTemplate}"
                                Background="White" 
                               HorizontalAlignment="Left"
                               Margin="40,0,0,0"
                               VerticalAlignment="Top"

    2012年11月4日 8:10

答案

  • 刚刚才绑定上数据,每个Item还没有生成和Loaded呢,所以是NULL,  你要在ListView.ItemContainerGenerator.ItemsChanged 事件中在item变化生成了之后才能获取


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

    • 已标记为答案 maming123 2012年11月12日 13:26
    2012年11月5日 9:53
    版主
  • 刚刚才绑定上数据,每个Item还没有生成和Loaded呢,所以是NULL,  你要在ListView.ItemContainerGenerator.ItemsChanged 事件中在item变化生成了之后才能获取


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

    HI,您好!

          按照您的提示,我使用了这个事件,成功,但还有一事不明,在第一人ITEM加载后事件触发(跟踪到事件触发),但取不能数据,只有当第二个ITEM生成触发事件后才能取到数据,CODE如下:

      void ItemContainerGenerator_ItemsChanged(object sender, ItemsChangedEventArgs e)
            {      
             
                    ListViewItem lvl = BingMapCityView.ItemContainerGenerator.ContainerFromIndex((this.DataContext as Data.ViewModelBingMap).BingMapView.Count - 1) as ListViewItem;
                    if (lvl != null)
                    {
                        //这里处理第一次集合加入项目时,从这里检测不到,使用第手次检测到时,重新操作第一次的UI
                        if ((this.DataContext as Data.ViewModelBingMap).BingMapView.Count==2)
                        {
                            ListViewItem lvlv = BingMapCityView.ItemContainerGenerator.ContainerFromIndex(0) as ListViewItem;
                            ProgressRing sbb= Model.TMSAPTranTM.FindVisualChildByName<ProgressRing>(lvlv, "pr");
                            sbb.IsActive = false;
                        }                 

                        ProgressRing sb = Model.TMSAPTranTM.FindVisualChildByName<ProgressRing>(lvl, "pr");                 
                        TextBlock tb = Model.TMSAPTranTM.FindVisualChildByName<TextBlock>(lvl, "noth");
                    
                        //Windows.UI.Xaml.Shapes.Path path = Model.TMSAPTranTM.FindVisualChildByName<Windows.UI.Xaml.Shapes.Path>(lvl, "pathShow");
                        //path.Tapped += path_Tapped;
                        pTb = tb;
                        Prr = sb;        
                    }
                //}
            }

      我没有好的办法,只能在第二次触发事件时去更新第一个ITEM的UI,请帮助一下?

    • 已标记为答案 maming123 2012年11月12日 13:26
    2012年11月7日 8:03

全部回复

  • 刚刚才绑定上数据,每个Item还没有生成和Loaded呢,所以是NULL,  你要在ListView.ItemContainerGenerator.ItemsChanged 事件中在item变化生成了之后才能获取


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

    • 已标记为答案 maming123 2012年11月12日 13:26
    2012年11月5日 9:53
    版主
  • 刚刚才绑定上数据,每个Item还没有生成和Loaded呢,所以是NULL,  你要在ListView.ItemContainerGenerator.ItemsChanged 事件中在item变化生成了之后才能获取


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

    HI,您好!

          按照您的提示,我使用了这个事件,成功,但还有一事不明,在第一人ITEM加载后事件触发(跟踪到事件触发),但取不能数据,只有当第二个ITEM生成触发事件后才能取到数据,CODE如下:

      void ItemContainerGenerator_ItemsChanged(object sender, ItemsChangedEventArgs e)
            {      
             
                    ListViewItem lvl = BingMapCityView.ItemContainerGenerator.ContainerFromIndex((this.DataContext as Data.ViewModelBingMap).BingMapView.Count - 1) as ListViewItem;
                    if (lvl != null)
                    {
                        //这里处理第一次集合加入项目时,从这里检测不到,使用第手次检测到时,重新操作第一次的UI
                        if ((this.DataContext as Data.ViewModelBingMap).BingMapView.Count==2)
                        {
                            ListViewItem lvlv = BingMapCityView.ItemContainerGenerator.ContainerFromIndex(0) as ListViewItem;
                            ProgressRing sbb= Model.TMSAPTranTM.FindVisualChildByName<ProgressRing>(lvlv, "pr");
                            sbb.IsActive = false;
                        }                 

                        ProgressRing sb = Model.TMSAPTranTM.FindVisualChildByName<ProgressRing>(lvl, "pr");                 
                        TextBlock tb = Model.TMSAPTranTM.FindVisualChildByName<TextBlock>(lvl, "noth");
                    
                        //Windows.UI.Xaml.Shapes.Path path = Model.TMSAPTranTM.FindVisualChildByName<Windows.UI.Xaml.Shapes.Path>(lvl, "pathShow");
                        //path.Tapped += path_Tapped;
                        pTb = tb;
                        Prr = sb;        
                    }
                //}
            }

      我没有好的办法,只能在第二次触发事件时去更新第一个ITEM的UI,请帮助一下?

    • 已标记为答案 maming123 2012年11月12日 13:26
    2012年11月7日 8:03