UI使用旧组件的值



这是我创建的演示代码。

当我删除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>

最新更新