UWP - 在Add上更改ListViewItem模板

时间:2018-01-19 13:20:41

标签: c# listview uwp datatemplate

当我尝试通过可观察的集合添加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 个答案:

答案 0 :(得分:1)

它未定义的原因是因为它创建ListViewItem所需的时间比添加到observable集合的时间长。 解决方案是等到它被定义:

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

答案 1 :(得分:0)

您可以尝试设置DataTemplate和DataContext。

像这样:

ListViewItem lvi = new ListViewItem();

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