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>
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>