Grupowanie i sumowanie objektow w ListView (WPF)

0

Witam, mam mala zagwostke, bo potrzebuje by dzialalo to w miare szybko i dynamicznie.

Mianowicie chodzi o to by zgrupowac i zsumowac obiekty na liscie, przykladaowa lista:

 
Papier 1
Dlugopis 2
Papier 1
Pisak 5
Pisak 7
Papier 12

Wynik jaki chce osiagnac to:

 
Dlugopis 2
Papier 14
Pisak 12

Czy WPF ma wbudowana taka funkcje czy musze napisac ja od zera?

1

Standardowa kontrolka chyba nie ma takiej funkcjonalności. Ale coś takiego chciałeś osiągnąć?:

<Grid>
   <ListView ItemsSource="{Binding ListViewCollection}" Margin="0,0,0,69">
      <ListView.View>
         <GridView>
            <GridViewColumn Width="140" Header="Name"
      DisplayMemberBinding="{Binding Name}"  />
            <GridViewColumn Width="140" Header="Number"  
      DisplayMemberBinding="{Binding Number}" />
         </GridView>
      </ListView.View>
   </ListView>
   <Button Margin="0,250,272,0" Content="Sumuj" Click="SumClick"></Button>
   <Button Margin="250,250,22,0" Content="Wszystko" Click="AllClick"/>
</Grid>
public partial class MainWindow : Window
{
   public MainWindow()
   {
      InitializeComponent();
      DataContext = this;
      FooCollection = new ObservableCollection<Foo>
      {
         new Foo {Name = "A", Number = 1},
         new Foo {Name = "A", Number = 1},
         new Foo {Name = "B", Number = 1},
         new Foo {Name = "B", Number = 1},
         new Foo {Name = "A", Number = 1}
      };

      ListViewCollection = new ObservableCollection<Foo>(FooCollection);
   }

   public ObservableCollection<Foo> FooCollection { get; set; }
   public ObservableCollection<Foo> ListViewCollection { get; set; }


   private void SumClick(object sender, RoutedEventArgs e)
   {
      var tmpCollection =
         ListViewCollection.GroupBy(x => x.Name)
            .Select(x => new Foo {Name = x.Key, Number = x.Sum(s => s.Number)})
            .ToList();
      ListViewCollection.Clear();
      foreach (var foo in tmpCollection)
      {
         ListViewCollection.Add(foo);
      }
   }

   private void AllClick(object sender, RoutedEventArgs e)
   {
      ListViewCollection.Clear();
      foreach (var foo in FooCollection)
      {
         ListViewCollection.Add(foo);
      }
   }
}

public class Foo
{
   public string Name { get; set; }
   public int Number { get; set; }
}
0

idealnie, jestes wielki!

teraz moge to dostosowac do swoich potrzeb.

Dzieki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1