WPF 多个数据源的实现DEMO,ListView中有个Combox籍贯,ListView的数据来自XML数据源,Combox籍贯来自另一个数据源。
<ListView Height="262" Margin="345,12,12,0" ItemsSource="{Binding Source={StaticResource myPerson4},XPath=/PersonF/person}" VerticalAlignment="Top" Name="listView3"> <ListView.Resources> <Con:JiGuan x:Key="JG"/> </ListView.Resources> <ListView.View> <GridView> <GridViewColumn Header="编号" DisplayMemberBinding="{Binding XPath=ID}" Width="100" /> <GridViewColumn Header="姓名" DisplayMemberBinding="{Binding XPath=Name}" Width="100"/> <GridViewColumn Header="年龄" Width="100"> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Grid.Column="1" Text="{Binding XPath=Age}" Foreground="{Binding XPath=Age, Converter={StaticResource BackgroundConverter}}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="籍贯" Width="100"> <GridViewColumn.CellTemplate> <DataTemplate> <ComboBox DataContext="{Binding Source={StaticResource JG}}" Width="50" SelectedIndex="0"> <ItemsControl ItemsSource="{Binding JGuan}"> <ItemsControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </ComboBox> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView>
资源:
<Window.Resources> <Con:BackgroundConverter x:Key="BackgroundConverter"/> <XmlDataProvider x:Key="myPerson4" Source="/Person.xml"/> </Window.Resources>
值转换:
public class BackgroundConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Color color = new Color(); int num = int.Parse(value.ToString()); if (num > 100) color = Colors.Yellow; else if (num < 50) color = Colors.LightGreen; else color = Colors.LightPink; return new SolidColorBrush(color); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion }
籍贯类:
public class JiGuan { private ObservableCollection<string> _jiguan; public JiGuan() { _jiguan = new ObservableCollection<string>(); _jiguan.Add("上海"); _jiguan.Add("杭州"); _jiguan.Add("南京"); _jiguan.Add("广州"); } public ObservableCollection<string> JGuan { get { return new ObservableCollection<string>(_jiguan); } private set { } } }
XML文件
<?xml version="1.0" encoding="utf-8" ?> <PersonF xmlns=""> <person Name="Person1"> <ID>1</ID> <Name>XiaoA</Name> <Age>59</Age> </person> <person Name="Person2"> <ID>2</ID> <Name>XiaoB</Name> <Age>29</Age> </person> <person Name="Person3"> <ID>3</ID> <Name>XiaoC</Name> <Age>103</Age> </person> <person Name="Person4"> <ID>4</ID> <Name>XiaoD</Name> <Age>59</Age> </person> </PersonF>
效果图:如下图,编号,姓名,年龄,籍贯来自不同的数据源,但是却在同一个ListView中,编号,姓名,年龄来自XML数据,籍贯来自籍贯类。