【问题标题】:Why multiply items in a ListView?为什么要在 ListView 中增加项目?
【发布时间】:2015-01-31 16:19:53
【问题描述】:

我在主页的 Loaded 事件中创建了一个包含我的类“Regioni”和“Musei”的一些对象的列表

然后我将这些项目添加到一个 ListView 中,并且 SelectedItem 事件恢复所选对象并将其放入新页面中

private void Page_Loaded(object sender, RoutedEventArgs e)
    {

        reg.Add(
            new Regioni
            {
                NomeRegione = "Toscana",
                NomeProvincia = "Firenze"
            });

        reg.Add(
            new Regioni
            {
                NomeRegione = "Toscana",
                NomeProvincia = "Prato"
            });

        var gruppi = reg.OrderBy(x => x.NomeRegione).GroupBy(x => x.NomeRegione);
        Museum.Source = gruppi;


        mus.Add(
           new Musei
           {
               NomeMuseo = "Galleria degli Uffizi",
               Paese = "Firenze",
               NumeroTel = "055294883",
               IndirizzoEmail = "mbac-sspsae-fi@beniculturali.it",
               PrezzoBiglietto = "8 € Intero, 4€ Ridotto\r\nGratuito inferiore 18 anni",
               Apertura = "Da martedì a domenica,\r\nore 8,15-18,50 Chiusura: Lunedi,Capodanno,Natale,1° Maggio.",
               IndirizzoWeb = "http://uffizi.firenze.it/",
               Immagine="Assets/Immagini/galleria-uffizi1.jpg",

               });
     }



private async void ListView_ItemClick_TuttiMusei(object sender, ItemClickEventArgs e)
        {
            var NuovoMuseo = (Musei)e.ClickedItem;
            this.Frame.Navigate(typeof(DettaglioMuseo), NuovoMuseo);
        }

为什么当我将对象插入新页面“DettaglioMuseo”并返回主页时,在 ListView 中我发现两次相同的项目?

【问题讨论】:

    标签: c# xaml listview windows-phone-8


    【解决方案1】:

    这是因为Loaded-事件再次触发并再次添加项目。

    所以你应该在添加之前检查你的Regionis 是否已经存在:

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        AddIfNotExists("Toscana", "Firenze");
        AddIfNotExists("Toscana", "Prato");
    
        var gruppi = ...
        ...
    }
    
    private void AddIfNotExists(string regione, string provincia)
    {
        if (!reg.Any(r => r.NomeProvincia == regione && r.NomeProvincia == provincia))
        {
            reg.Add(new Regioni { NomeRegione = regione, NomeProvincia = provincia });
        }
    }
    

    【讨论】:

    • 谢谢,这行得通,但是还有其他方法吗?有时我会在某些项目中发布一些属性,在其他属性中发布其他对象,等等。对于每个对象并不插入所有属性(参见类博物馆)。有其他方法吗?
    • 我明白你的意思。你可以在你的类中实现equals(看看at thishere in italian)。实现后,您可以比较您的对象,例如if (nuovoMuseo == altroMuseo) { lista.Add(nuovoMuseo); }
    • 是否存在打开页面时只调用一次的方法?
    猜你喜欢
    • 2018-10-03
    • 2021-05-15
    • 1970-01-01
    • 2015-03-29
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多