On WPF I build this code I want to show on datagrid the sum of "Desc" for each "PID"
public class Event
{
public int PID { get; set; }
public int Desc { get; set; }
}
private List<Event> data;
public MainWindow()
{
InitializeComponent();
data = new List<Event>()
{
new Event() { PID = 1, Desc=2 },
new Event() { PID = 1, Desc=3 },
new Event() { PID = 2, Desc=4 },
new Event() { PID = 2, Desc=5 },
new Event() { PID = 3, Desc=6 }
};
var result =
from d in data
group d.Desc by d.PID into pg
select new { ID = pg.Key, SUM = pg.Sum() };
datagrid.ItemsSource = result;
}
And the XAML is
<DataGrid Name="datagrid" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="id" Binding="{Binding ID}" Width="*"/>
<DataGridTextColumn Header="Name" Binding="{Binding SUM}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
that work well! but this is not good,
What I want to do is return that "var result" from function and binding like I did to DataGrid How can I do this?
This is from IEnumerable<IGrouping<int,???>>
on ??? there is anonymous type....
so how can I return this from function and binding like I did on DataGrid?
Thanks!
You need a class to represent each item of your sequence. This way your result wouldn't be a sequence of objects of an anonymous type, but it would be sequence of objects of a specific type.
Then you will define a method like below:
and then in your
MainWindow
method you will call this method.I have
supposed
that you have defined this method in the same class. It is quite possible that this is not a good practice. So if you define this method in another class, you have to create first an object of this class and later call theGetResults
method of this object.Furthermore, I attempted to make a slight change in the naming. It is more common to use camel case naming and not use capital letters for all the letters. That being said, you have also to make a slight change in your xaml code.