轉帖|其它|編輯:郝浩|2011-01-25 13:35:08.000|閱讀 1912 次
概述:我們在Silverlight開發過程中,很常見的情形是已經做好綁定的DataGrid內需要綁定不同數據源的數據,比如一個來自不同數據源的ComboBox。本文主要介紹在Silverlight DataGrid中實現多個數據源綁定的辦法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
我們在Silverlight開發過程中,很常見的情形是已經做好綁定的DataGrid內需要綁定不同數據源的數據,比如一個來自不同數據源的ComboBox。
下面舉個簡單的例子:
我們最終要顯示的結果如上圖所示,其中姓名,年齡來自 MainData 數據源,籍貫來自 BindingJG 數據源。
先簡單把這兩個數據源建好:
MainData:
using System.Collections.ObjectModel;
namespace SilverlightBinding
{
public class People
{
public string Name { get; set; }//姓名
public int Age { get; set; }//年齡
public People(string name,int age)
{
Name = name;
Age = age;
}
}
public class MainData
{
private ObservableCollection<People> _myPeople;
public MainData()
{
_myPeople = new ObservableCollection<People>();
_myPeople.Add(new People("張三", 17));
_myPeople.Add(new People("李四", 18));
_myPeople.Add(new People("王五", 19));
_myPeople.Add(new People("趙六", 20));
}
public ObservableCollection<People> myPeople
{
get
{
return _myPeople;
}
private set
{
}
}
}
}
ndingJG :
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
namespace SilverlightBinding
{
public class BindingJG
{
private ObservableCollection<string> _jiguan;
public BindingJG()
{
_jiguan = new ObservableCollection<string>();
_jiguan.Add("北京");
_jiguan.Add("上海");
_jiguan.Add("廣州");
_jiguan.Add("海南");
}
public ObservableCollection<string> JiGuan
{
get
{
return new ObservableCollection<string>(_jiguan);
}
private set { }
}
現在要把這兩個數據源同時綁定到MainPage.xaml 里的 dataGrid上,
要先添加對籍貫數據類的引用:
<UserControl xmlns:sdk="//schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="SilverlightBinding.MainPage"
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="//schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="//schemas.microsoft.com/expression/blend/2008"
xmlns:mc="//schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:comJG="clr-namespace:SilverlightBinding"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
然后就可以在dataGrid里引用籍貫數據,以下是dataGrid的完整代碼:
<sdk:DataGrid x:Name="dataGrid" Width="300" Height="200" AutoGenerateColumns="False" ItemsSource="{Binding}">
<sdk:DataGrid.Resources>
<comJG:BindingJG x:Key="iJG"/>
</sdk:DataGrid.Resources>
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Name}" Header="姓名" Width="Auto"/>
<sdk:DataGridTextColumn Binding="{Binding Age}" Header="年齡" Width="Auto"/>
<sdk:DataGridTemplateColumn Header="籍貫" Width="Auto">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="JGCombo" DataContext="{Binding Source={StaticResource iJG}}">
<ItemsControl ItemsSource="{Binding JiGuan}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ComboBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
其中的關鍵代碼:
<ComboBox x:Name="JGCombo" DataContext="{Binding Source={StaticResource iJG}}">
<ItemsControl ItemsSource="{Binding JiGuan}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ComboBox>
再把MainData數據賦值給dataGrid就可以了
public MainPage()
{
InitializeComponent();
MainData md = new MainData ();
this.dataGrid.ItemsSource = md.myPeople;
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載