【问题标题】:UI uses values of old components [closed]UI使用旧组件的值[关闭]
【发布时间】:2021-02-08 06:18:59
【问题描述】:

This 是我创建的演示代码。

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

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

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

【问题讨论】:

    标签: uwp binding uwp-xaml


    【解决方案1】:

    您需要为InnerTestTemplate 类和TestTemplate 类添加构造函数,然后TestTemplate 对象将有一个空的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 的说法,ListView 的虚拟化更像是如何以及何时渲染ListView 中的项目。这就是新的CheckBox 显示旧的值的原因吗?
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2012-01-08
    • 1970-01-01
    • 2016-04-30
    • 2014-08-25
    相关资源
    最近更新 更多