2011-01-03 15 views
1

私はC#4.0、WPFで作業しています。私は3つのListViewコントロールを持っている、と3つのすべてのコントロールが同じItemContainerGenerator_ItemsChanged」イベントハンドラを持っている。私の問題は、私は、イベントハンドラ内からホストListViewを見つけたいということですので。ItemContainerGenerator.itemChangedイベントからホストを見つける

lst1.ItemContainerGenerator.ItemsChanged += new System.Windows.Controls.Primitives.ItemsChangedEventHandler(ItemContainerGenerator_ItemsChanged); 

lst2.ItemContainerGenerator.ItemsChanged += new System.Windows.Controls.Primitives.ItemsChangedEventHandler(ItemContainerGenerator_ItemsChanged); 

lst3.ItemContainerGenerator.ItemsChanged += new System.Windows.Controls.Primitives.ItemsChangedEventHandler(ItemContainerGenerator_ItemsChanged); 


void ItemContainerGenerator_ItemsChanged(
    object sender, 
    System.Windows.Controls.Primitives.ItemsChangedEventArgs e) 
    { 
     //TODO: Find ListView instance. 
     // **REAL Problem** 
     // ListViewItem's Visible property has been set based on the deletion 
     // button click, so at one place i have to get the count of rows which 
     // are visible and proceed with related buttons enable/disable operation. 
    } 
+0

イベントハンドラとして、これがクリアされない場合は、質問ライズ。 – Mohanavel

答えて

2

最も簡単な解決策は、ラムダを使用することですしてください、あなたの「本当の」ハンドラにListViewインスタンスを転送できるようにします。

lst1.ItemContainerGenerator.ItemsChanged += 
    (o, e) => this.ListViewGeneratorItemsChanged(o, e, lst1); 

lst2.ItemContainerGenerator.ItemsChanged += 
    (o, e) => this.ListViewGeneratorItemsChanged(o, e, lst2); 

lst3.ItemContainerGenerator.ItemsChanged += 
    (o, e) => this.ListViewGeneratorItemsChanged(o, e, lst3); 

void ListViewGeneratorItemsChanged(object sender, ItemsChangedEventArgs e, ListView listView) 
{ 
    // We have the ListView and also the ItemContainerGenerator (in sender) 
} 
+0

私はいるItemContainerGeneratorを得ることができ、私は、のいずれかを取得する必要がありますすなわち、lst1またはlst2またはlst3。ItemContainerGeneratorは、ホストをprivとして保持します。メンバーを食べたので、それが属するリストにアクセスできませんでした。 – Mohanavel

+0

@Mohanavel:私の答えを更新しました。それをチェックしてください。私は質問を正しく理解していなかった。 – Jon

+0

あなたの理解と回答の両方が正しいです。 – Mohanavel

関連する問題