2011-01-03 4 views
1

저는 C# 4.0, WPF에서 작업 중입니다. 나는 3 ListView에 있고, 세 개의 컨트롤이 같은 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