Найти хост из события ItemContainerGenerator.itemChanged - PullRequest
1 голос
/ 03 января 2011

Я работаю над C # 4.0, WPF. У меня есть три ListView, и все три элемента управления имеют одинаковый обработчик события ItemContainerGenerator_ItemsChanged ". Поэтому моя проблема заключается в том, что я хочу найти хост 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.
    }

1 Ответ

2 голосов
/ 03 января 2011

Самое простое решение - использовать лямбда-выражения в качестве обработчиков событий, чтобы вы могли переслать экземпляр 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)
}
...