ListViewItems的生命周期

时间:2017-01-09 15:51:41

标签: wpf listview ui-virtualization

默认情况下,WPF ListViewGridView)已虚拟化。因此,我将ItemSource属性绑定到ViewModel中的可观察集合,因为我正在使用MVVM模式(使用Caliburn.Micro,但我认为这无关紧要。)

当ListView使用 (在范围内并由UI listviewitem表示)时,我如何在我的项目视图模型(itemsource项目)上调用方法,当它们是 unused (不再在范围内并在UI上显示)?

延迟加载一些细节数据会非常好,但仅限于可见记录。

1 个答案:

答案 0 :(得分:3)

您可以使用已覆盖的PrepareContainerForItemOverrideClearContainerForItemOverride方法获取派生的ListView:

public class MyListView : ListView
{
    protected override void PrepareContainerForItemOverride(
        DependencyObject element, object item)
    {
        base.PrepareContainerForItemOverride(element, item);

        ((MyItem)item).DoSomethingOnPrepare();
    }

    protected override void ClearContainerForItemOverride(
        DependencyObject element, object item)
    {
        ((MyItem)item).DoSomethingOnClear();

        base.ClearContainerForItemOverride(element, item);
    }
}