Uwp UI使用旧组件的值

Uwp UI使用旧组件的值,uwp,binding,uwp-xaml,Uwp,Binding,Uwp Xaml,是我创建的演示代码 当我在ObservableCollection中删除一个元素,然后插入一个新元素时,新元素的UI似乎以某种方式显示了被删除元素的值 例如,当我单击删除按钮,然后单击添加按钮时,应该有一个新的TestTemplate对象,其值为nullInnerTestTemplate。但是,新对象仍将具有已删除元素的旧InnerTestTemplate值 此外,我发现在新创建TestTemplate时,并不总是调用InitializeComponent()。也就是说,当我选中最上面的复选框时

是我创建的演示代码

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

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


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

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

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

public TestTemplate()
{
    _innerTestTemplate = new InnerTestTemplate();
}
关于重复使用已删除的
复选框
,如果
列表视图
中的项目数不多,您可以取消虚拟化
列表视图
。在
列表视图
中添加以下代码,该视图使用
堆栈面板
替换默认代码:

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

……

谢谢您的回答。据介绍,
ListView
的虚拟化更像是如何以及何时呈现
ListView
中的项目。这就是为什么新的
复选框显示旧复选框的值的原因吗?