UI 使用旧组件的值

UI uses values of old components

This是我创建的演示代码。

当我删除 ObservableCollection 中的一个元素然后插入一个新元素时,新元素的 UI 似乎以某种方式显示了已删除元素的值。

例如,当我单击删除按钮,然后单击添加按钮时,应该有一个新的 TestTemplate 对象,其 InnerTestTemplate 值为空。但是,新对象仍将具有已删除元素的旧 InnerTestTemplate 值。

此外,我发现 InitializeComponent()TestTemplate 被更新时并不总是被调用。也就是说,当我选中最上面的复选框,点击删除按钮,然后点击添加按钮时,最上面的复选框的复选框保持选中状态,这是不应该被选中的。

您需要为 InnerTestTemplate class 和 TestTemplate class 添加构造函数,然后 TestTemplate 对象将有一个 null InnerTestTemplate值。

public InnerTestTemplate()
{
    //......
}

public TestTemplate()
{
    _innerTestTemplate = new InnerTestTemplate();
}

关于删除的CheckBox的再利用,如果ListView的条目数不大,可以取消ListView的虚拟化。在你的 ListView 中添加以下代码,其中使用 StackPanel 替换默认的:

<ListView ……>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        ……
   </ListView.ItemTemplate>
</ListView>