代码之家  ›  专栏  ›  技术社区  ›  Martin Nowak

UWP-在添加时更改ListViewItem模板

  •  0
  • Martin Nowak  · 技术社区  · 6 年前

    当我试图通过可观察的集合添加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"];
            }
    

    当我运行这个lvi时,它返回null,并且下一行无法执行。如有任何建议,将不胜感激。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Martin Nowak    6 年前

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

    ListViewItem lvi = ticketListview.ContainerFromItem(item) as ListViewItem;
                while(lvi == null)
                {
                    await Task.Delay(25);
                    lvi = ticketListview.ContainerFromItem(item) as ListViewItem;
                }
    
        2
  •  0
  •   J.B. Schubert    6 年前

    您可以尝试设置DataTemplate和DataContext。

    这样地:

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