关于DataGrid呈现数据的问题

小紧张 2014-05-16 08:39:26
DataGrid dg

List<Activity> list //这是要呈现的数据合集

dg.ItemsSource = list;

在xaml里面加了一些列控件,然后绑定了Activity的一些我需要呈现的字段
如:
<DataGridTextColumn Header="活动名称" Binding="{Binding Path=name}"/>

现在遇到一个问题。
这个DataGrid需要呈现Activity以外的数据。
Activity是一个活动,一个活动对应了很多个报名信息(ActivityEnroll)。

我现在的想法是这样的
Dictionary<Activity, List<ActivityEnroll>> dictionary
用DataGrid来绑定dictionary是否能实现我想要的效果呢?如果可以,那么xaml里面的Binding该怎么写呢。

各位大大最好写点代码给小弟参考一下,感激不尽~~
...全文
107 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bonjour-你好 2014-05-17
  • 打赏
  • 举报
回复
<Window x:Class="MyTestWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyTestWpf"
Title="MainWindow" Height="350" Width="525">

<Window.Resources>
<local:MyTestConverter x:Key="testConverter"/>
</Window.Resources>

<Grid>
<DataGrid x:Name="dataGrid1" MinColumnWidth="80" AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="217" Width="425">
<DataGrid.Columns>
<DataGridTextColumn Header="名称" Binding="{Binding Key.Name}"/>
<DataGridTextColumn Header="内容" Binding="{Binding Key.Content}"/>
<DataGridTextColumn Header="时间" Binding="{Binding Key.Time,StringFormat='yyyy-MM-dd'}"/>
<DataGridTextColumn Header="报名人数" Binding="{Binding Value.Count}"/>
<DataGridTextColumn Header="参与人数" Binding="{Binding Value,Converter={StaticResource testConverter}}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;

namespace MyTestWpf
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

DateTime time = DateTime.Now;
Dictionary<Activity, List<ActivityEnroll>> source = new Dictionary<Activity, List<ActivityEnroll>>();

Activity a1 = new Activity {
Name = "名称 1",
Content = "内容 1",
Time = time.AddDays(-3)
};
List<ActivityEnroll> ae1 = new List<ActivityEnroll> {
new ActivityEnroll { Statr=1},
new ActivityEnroll { Statr=2},
new ActivityEnroll { Statr=1},
new ActivityEnroll { Statr=3},
new ActivityEnroll { Statr=0}
};
source.Add(a1, ae1);

Activity a2 = new Activity {
Name = "名称 2",
Content = "内容 2",
Time = time.AddDays(-5)
};
List<ActivityEnroll> ae2 = new List<ActivityEnroll> {
new ActivityEnroll { Statr=1},
new ActivityEnroll { Statr=2},
new ActivityEnroll { Statr=1},
new ActivityEnroll { Statr=1}
};
source.Add(a2, ae2);

var temp = source.ToList();
this.dataGrid1.ItemsSource = temp;
}
}

public class Activity
{
public String Name { get; set; }
public String Content { get; set; }
public DateTime Time { get; set; }
}

public class ActivityEnroll
{
public Int32 Statr { get; set; }
}

public class MyTestConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
List<ActivityEnroll> temp = value as List<ActivityEnroll>;
if (temp != null) {
return temp.Where(x => x.Statr == 1).ToList().Count;
}

return null;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

小紧张 2014-05-16
  • 打赏
  • 举报
回复
引用 1 楼 KumaPower 的回复:
用一个ListBox绑定Dictionary<Activity, List<ActivityEnroll>>的Keys,DataGrid 根据 ListBox 的选项不同而呈现不同的 List<ActivityEnroll>。
啊不好意思,我没问清楚问题。 我是想DataGrid呈现List<Activity>的数据。 但是我想通过每一个Activity得到的每一个List<ActivityEnroll>的Count都呈现进去。 也就是 名称 内容 时间 报名人数 参与人数 这样的5列。前3列是Activity的,后两列分别是List<ActivityEnroll>的Count和List<ActivityEnroll>中ActivityEnroll.statr==1的count
Bonjour-你好 2014-05-16
  • 打赏
  • 举报
回复
用一个ListBox绑定Dictionary<Activity, List<ActivityEnroll>>的Keys,DataGrid 根据 ListBox 的选项不同而呈现不同的 List<ActivityEnroll>。

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧