C# 从ItemContainerGenerator.itemChanged事件查找主机
我正在研究C#4.0,WPF。我有三个ListView,所有三个控件都有相同的ItemContainerGenerator_ItemsChanged“事件处理程序。因此,我的问题是我想从事件处理程序中查找主机C# 从ItemContainerGenerator.itemChanged事件查找主机,c#,wpf,itemcontainergenerator,C#,Wpf,Itemcontainergenerator,我正在研究C#4.0,WPF。我有三个ListView,所有三个控件都有相同的ItemContainerGenerator_ItemsChanged“事件处理程序。因此,我的问题是我想从事件处理程序中查找主机ListView lst1.ItemContainerGenerator.ItemsChanged += new System.Windows.Controls.Primitives.ItemsChangedEventHandler(ItemContainerGenerator_ItemsC
ListView
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.
}
最简单的解决方案是使用lambda作为事件处理程序,这样您就可以将
ListView
实例转发给“真正的”处理程序
我可能只获取ItemContainerGenerator,我需要获取列表视图本身的任何一个。例如,lst1、lst2或lst3。ItemContainerGenerator作为私有成员持有主机,因此我无法访问它所属的列表。@Mohanavel:更新了我的答案,请检查。我没有正确理解问题。
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)
}