ListViewItems 的生命周期
Lifecycle for ListViewItems
默认情况下,WPF ListView
(带有 GridView
)是虚拟化的。所以我将我的 ItemSource
属性 绑定到 ViewModel 中的一个可观察集合,因为我使用的是 MVVM 模式(使用 Caliburn.Micro 但我想这无关紧要)。
当 使用(在范围内并由 UI 表示时,如何在我的项目视图模型(itemsource 的项目)上调用方法listviewitem)由 ListView 以及它们何时 未使用(不再在范围内并在 UI 上表示)?
延迟加载一些详细数据会非常好,但仅限于可见记录。
您可以使用重写的 PrepareContainerForItemOverride
和 ClearContainerForItemOverride
方法派生 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);
}
}
默认情况下,WPF ListView
(带有 GridView
)是虚拟化的。所以我将我的 ItemSource
属性 绑定到 ViewModel 中的一个可观察集合,因为我使用的是 MVVM 模式(使用 Caliburn.Micro 但我想这无关紧要)。
当 使用(在范围内并由 UI 表示时,如何在我的项目视图模型(itemsource 的项目)上调用方法listviewitem)由 ListView 以及它们何时 未使用(不再在范围内并在 UI 上表示)?
延迟加载一些详细数据会非常好,但仅限于可见记录。
您可以使用重写的 PrepareContainerForItemOverride
和 ClearContainerForItemOverride
方法派生 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);
}
}