2011-01-22 16 views
5

ListViewに追加されたListViewItemがありますが、どのListViewに追加されているのかわかりません。ListViewItemからListViewを取得する方法は?

ListViewItemを使用して、アイテム自体からListViewを取得したいと考えています。

私はParentプロパティを使用しようとしましたが、なんらかの理由でStackPanelを返します。

アイデア?

+0

MVVMではそのような問題はありません。 – vorrtex

+5

それはこれと関係があったように... –

答えて

5

私は実行するためにこれを得て、作業しました:

private void Window_Loaded(object s, RoutedEventArgs args) 
    { 
     var collectionview = CollectionViewSource.GetDefaultView(this.listview.Items); 
     collectionview.CollectionChanged += (sender, e) => 
     { 
      if (e.NewItems != null && e.NewItems.Count > 0) 
      {     
       var added = e.NewItems[0]; 
       ListViewItem item = added as ListViewItem; 
       ListView parent = FindParent<ListView>(item); 
      } 
     }; 

    } 
    public static T FindParent<T>(FrameworkElement element) where T : FrameworkElement 
    { 
     FrameworkElement parent = LogicalTreeHelper.GetParent(element) as FrameworkElement; 

     while (parent != null) 
     { 
      T correctlyTyped = parent as T; 
      if (correctlyTyped != null) 
       return correctlyTyped; 
      else 
       return FindParent<T>(parent); 
     } 

     return null; 
    } 
4

これはかなり古い質問ですが、それはWinRTのためにWinRTの

のために動作しません、あなたはビジュアルツリーをトラバースする必要がありますListViewItemからListViewを見つけるためにLogicalTreeHelperの代わりにVisualTreeHelperを使用する

+1

+1他人を助けるかもしれない。 –

0

私は既に提案されたアプローチとは異なるアプローチを使用しています。

リストビューコントロール(2つまたは3つ)がほんの一足なので、以下のことができます。

ListViewItem listViewItem = e.OriginalSource as ListViewItem; 
if (listViewItem == null) 
{ 
    ... 
} 
else 
{ 
    if (firstListView.ItemContainerGenerator.IndexFromContainer(listViewItem) >= 0) 
    { 
     ... 
    } 
    else if (secondListView.ItemContainerGenerator.IndexFromContainer(listViewItem) >= 0) 
    { 
     ... 
    } 
} 

これは、foreachループではなくのListViewItemの親のListViewを探して、その後を反復処理するために、リストビューコントロールの何百もある場合に使用することができる(他の回答のほとんどが示唆される)おそらくより効率的です。しかし、私のソリューションはよりクリーナーであると思います。誰かを助けることを願っています!

ListView listView = ItemsControl.ItemsControlFromItemContainer(listViewItem) as ListView; 
0

私は最近、この簡潔な解決策を発見しました。
関連する問題