none
ListView GroupStyle RRS feed

  • Domanda

  • Ciao a tutti,

    sto ho creato una ListView dinamicamente, e vorrei che mi raggruppasse in base ad una proprietà,

    utilizzando questo codice:

    var list = (from c in ddts select c).Skip(i).Take(split_pages); ListView l = new ListView(); l.FontSize = 12; ScrollViewer.SetVerticalScrollBarVisibility(l, ScrollBarVisibility.Hidden); ScrollViewer.SetHorizontalScrollBarVisibility(l, ScrollBarVisibility.Hidden); l.ItemsSource = list; CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(l.ItemsSource); PropertyGroupDescription groupDescription = new PropertyGroupDescription("GroupDescription"); view.GroupDescriptions.Add(groupDescription); l.ItemsSource = view; GridView g = new GridView(); GridViewColumn firstNameColumn = new GridViewColumn() { Header = "Codice Prodotto", DisplayMemberBinding = new Binding("Code"), Width = 120, }; GridViewColumn lastNameColumn = new GridViewColumn() { Header = "Descrizione delle merce", DisplayMemberBinding = new Binding("Description"), Width = 450, }; GridViewColumn treeNameColumn = new GridViewColumn() { Header = "U.M.", DisplayMemberBinding = new Binding("Unit"), Width = 45, }; GridViewColumn quattroNameColumn = new GridViewColumn() { Header = "Quantità", DisplayMemberBinding = new Binding("Quantity"), Width = 60, }; g.Columns.Add(firstNameColumn); g.Columns.Add(lastNameColumn); g.Columns.Add(treeNameColumn); g.Columns.Add(quattroNameColumn); l.View = g; DataTemplate dt = new DataTemplate(); FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(TextBlock)); spFactory.SetValue(TextBlock.FontWeightProperty, FontWeights.Bold); spFactory.SetValue(TextBlock.ForegroundProperty, new SolidColorBrush(Colors.Red)); //spFactory.SetBinding(TextBlock.TextProperty, new Binding("JobDescription")); spFactory.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("GroupDescription") }); dt.VisualTree = spFactory; GroupStyle groupStyle = new GroupStyle(); groupStyle.HeaderTemplate = dt; l.GroupStyle.Add(groupStyle);


    a runtime il raggruppamento lo fa, ma non visualizza il valore della proprietà di raggruppamento (riga vuota)

    Qualcuno potrebbe darmi qualche suggerimento ?

    grazie in anticipo  a tutti


    fabio miceli

    domenica 17 maggio 2020 20:39

Risposte

Tutte le risposte

  • La view che ottieni non dovresti riassegnarla all'items source. Quando crei PropertyGroupDescription devi passargli il nome della proprietà in base a cui raggruppare.

    lunedì 18 maggio 2020 12:52
  • Ciao BlueLed Grazie per avermi risposto,

    non credo di aver capito bene.....

    ho commentato  la riassegnazione di itemsource della listview,

    la proprietà di raggruppamento è JobDescription.....non devo passare quella  a PropertyGroupDescription  ?

                    CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(l.ItemsSource);
                    PropertyGroupDescription groupDescription = new PropertyGroupDescription("JobDescription");
                    view.GroupDescriptions.Add(groupDescription);
                    //l.ItemsSource = view;
    
                    GridView g = new GridView();
                    GridViewColumn firstNameColumn = new GridViewColumn() { Header = "Codice Prodotto", DisplayMemberBinding = new Binding("Code"), Width = 120, };
                    GridViewColumn lastNameColumn = new GridViewColumn() { Header = "Descrizione delle merce",  DisplayMemberBinding = new Binding("Description"),  Width = 450, };
                    GridViewColumn treeNameColumn = new GridViewColumn() { Header = "U.M.", DisplayMemberBinding = new Binding("Unit"), Width = 45, };
                    GridViewColumn quattroNameColumn = new GridViewColumn() { Header = "Quantità", DisplayMemberBinding = new Binding("Quantity"), Width = 60, };
    
                    g.Columns.Add(firstNameColumn);
                    g.Columns.Add(lastNameColumn);
                    g.Columns.Add(treeNameColumn);
                    g.Columns.Add(quattroNameColumn);
    
                    l.View = g;
    
    
                    DataTemplate dt = new DataTemplate();
                    FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(TextBlock));
                    spFactory.SetValue(TextBlock.FontWeightProperty, FontWeights.Bold);
                    spFactory.SetValue(TextBlock.ForegroundProperty, new SolidColorBrush(Colors.Red));
                    //spFactory.SetBinding(TextBlock.TextProperty, new Binding("JobDescription"));
                    spFactory.SetBinding(TextBlock.TextProperty, new Binding() { Path = new PropertyPath("JobDescription") });
                    dt.VisualTree = spFactory;
                    GroupStyle groupStyle = new GroupStyle();
                    groupStyle.HeaderTemplate = dt;
    
                    l.GroupStyle.Add(groupStyle);
    


    fabio miceli

    lunedì 18 maggio 2020 18:58
  • ho provato a settare la proprietà in questo modo:

     groupDescription.PropertyName= "JobDescription";

    ma no cambia niente.

    Raggruppa ma non visualizza il valore della proprietà


    fabio miceli

    lunedì 18 maggio 2020 19:15
  • Nel set binding del group style, il path dovrebbe essere "Name"
    • Contrassegnato come risposta Fabio Miceli martedì 19 maggio 2020 17:23
    lunedì 18 maggio 2020 21:14
  • Era proprio quella, "Name"

    Grazio mille per l'aiuto

    ciao alla prossima


    fabio miceli

    martedì 19 maggio 2020 17:23