WPF实现三级联动Grade-->Class-->Student,数据来自Access,采用LinqToAccess,已封装成DLL,数据库在附件中。
见图:
- <Window x:Class="Demo16_MasterDetailBinding2.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="clr-namespace:Demo16_MasterDetailBinding2"
- xmlns:dl="clr-namespace:DataLibrary;assembly=DataLibrary"
- Title="MainWindow" Height="350" Width="525">
- <Window.Resources>
- <ObjectDataProvider x:Key="gradeList" IsAsynchronous="True"
- ObjectType="{x:Type local:MainWindow}"
- MethodName="LoadData"/>
- </Window.Resources>
- <Grid DataContext="{StaticResource gradeList}">
- <Grid.Resources>
- <Style TargetType="TextBlock">
- <Setter Property="Margin" Value="5" />
- </Style>
- <Style TargetType="ListBox">
- <Setter Property="Margin" Value="5" />
- </Style>
- </Grid.Resources>
- <Grid.ColumnDefinitions>
- <ColumnDefinition />
- <ColumnDefinition />
- <ColumnDefinition />
- </Grid.ColumnDefinitions>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto" />
- <RowDefinition />
- </Grid.RowDefinitions>
- <TextBlock Text="Grade" Grid.Row="0" Grid.Column="0" />
- <TextBlock Text="Class" Grid.Row="0" Grid.Column="1" />
- <TextBlock Text="Student" Grid.Row="0" Grid.Column="2" />
- <ListBox Grid.Row="1" Grid.Column="0" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" DisplayMemberPath="GradeName" />
- <ListBox Grid.Row="1" Grid.Column="1" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=Class}" DisplayMemberPath="ClassName" />
- <ListBox Grid.Row="1" Grid.Column="2" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=Class/Student}" DisplayMemberPath="StudentName"/>
- </Grid>
- </Window>
- using System.Linq;
- using System.Windows;
- using DataLibrary;
- namespace Demo16_MasterDetailBinding2 {
- /// <summary>
- /// MainWindow.xaml 的交互逻辑
- /// </summary>
- public partial class MainWindow : Window {
- public MainWindow() {
- InitializeComponent();
- }
- /// <summary>
- /// 加载数据,请注意使用public static
- /// </summary>
- public static IQueryable LoadData() {
- MySchoolDataContext dc = Linq2AccessFactory.GetMySchoolDataContext();
- var query = from g in dc.Grade
- select g;
- return query;
- }
- }
- }