UWP - 添加时更改 ListViewItem 模板

UWP - Changing ListViewItem Template on Add

当我尝试通过可观察集合添加 ListViewItem 并更改它的 DataTemplate 时,我的代码出现问题。

            CurrentTicket.Add(new Item { itemID = selectedItem.itemID, price = price, name = selectedItem.name, taxID = selectedItem.taxID,modName = modNames });

        if(modNames.Count() != 0)
        {
            ListViewItem lvi = (ticketListBox).ContainerFromIndex(ticketListBox.Items.Count - 1) as ListViewItem;
            lvi.ContentTemplate = (DataTemplate)this.Resources["CurrentTicketModDataTemplate"];
        }

当我运行 this lvi returns null 和下一行执行失败。任何建议将不胜感激。

您可以尝试设置 DataTemplate 和 DataContext。

像这样:

ListViewItem lvi = new ListViewItem();

lvi.DataTemplate = ticketListBox.DataTemplate;
lvi.DataContext = YourObservableCollection.Last();

未定义的原因是创建 ListViewItem 的时间比添加到可观察集合的时间多。 解决方案是等到它被定义:

ListViewItem lvi = ticketListview.ContainerFromItem(item) as ListViewItem;
            while(lvi == null)
            {
                await Task.Delay(25);
                lvi = ticketListview.ContainerFromItem(item) as ListViewItem;
            }