这是我创建的演示代码。
当我删除ObservableCollection
中的一个元素,然后插入一个新元素时,新元素的UI似乎以某种方式显示了被删除元素的值。
例如,当我单击remove按钮,然后单击add按钮时,应该有一个新的TestTemplate
对象的InnerTestTemplate
值为空。但是,新对象仍将具有已删除元素的旧InnerTestTemplate
值。
此外,我发现当TestTemplate
是新的时,InitializeComponent()
并不总是被调用的。也就是说,当我选中最上面的复选框,单击删除按钮,然后单击添加按钮时,最上面复选框的复选框将保持选中状态,而不应该选中该复选框。
您需要为InnerTestTemplate
类和TestTemplate
类添加构造函数,然后TestTemplate
对象将具有空InnerTestTemplate
值。
public InnerTestTemplate()
{
//......
}
public TestTemplate()
{
_innerTestTemplate = new InnerTestTemplate();
}
关于已删除的CheckBox
的重新使用,如果ListView
中的项目数不多,则可以取消对ListView
的虚拟化。在使用StackPanel
替换默认代码的ListView
中添加以下代码:
<ListView ……>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
……
</ListView.ItemTemplate>
</ListView>