上次讲到数据模板的绑定(DataTemplate),今天在这基础上我进行了延伸。下面我们把数据绑定到ObjectDataProvider上。
ObjectDataProvider:包装和创建可以用作绑定源的对象。
首先我们先设定一些数据。
先看下结果图吧。
蓉e行怎么解除绑定。新建一个Data.cs类。
我们在里面新建6个类,看类图吧。
这里League是哪个国家的队,Division是这个国家队有哪些地方队组成,Team是某一个具体的队。
让我们看下具体代码:
wpf步骤控件。
代码 /// <summary>/// 这个国家队的某个地方的队/// </summary>public class Team{public Team(string name){Name = name;}public string Name { get; set; }}/// <summary>/// 这个国家队的某个地方的队集合/// </summary>public class TeamList:List<Team>{public TeamList(): base(){ }}/// <summary>/// 这个国家队来自哪里的/// </summary>public class Division{public string Name { get; set; }public TeamList Teams { get; set; }public Division(string name){this.Name = name;Teams = new TeamList();}}/// <summary>/// 这个国家队的集合/// </summary>public class DivisionList:List<Division>{public DivisionList(): base(){ }}/// <summary>/// 哪个国家的队/// </summary>public class League{public string Name { get; set; }public DivisionList Divisions { get; set; }public League(string name){this.Name = name;Divisions = new DivisionList();}}/// <summary>/// 所有队及类型/// </summary>public class LeagueList:List<League>{public LeagueList() : base() {League l;Division d;l = new League("中国队");Add(l);d = new Division("中国北方队");l.Divisions.Add(d);d.Teams.Add(new Team("中国北方1号队"));d.Teams.Add(new Team("中国北方2号队"));d.Teams.Add(new Team("中国北方3号队"));d.Teams.Add(new Team("中国北方4号队"));d.Teams.Add(new Team("中国北方5号队"));d = new Division("中国南方队");l.Divisions.Add(d);d.Teams.Add(new Team("中国南方1号队"));d.Teams.Add(new Team("中国南方2号队"));d.Teams.Add(new Team("中国南方3号队"));d.Teams.Add(new Team("中国南方4号队"));d.Teams.Add(new Team("中国南方5号队"));l = new League("美国队");Add(l);d = new Division("美国北方队");l.Divisions.Add(d);d.Teams.Add(new Team("美国北方1号队"));d.Teams.Add(new Team("美国北方2号队"));d.Teams.Add(new Team("美国北方3号队"));d.Teams.Add(new Team("美国北方4号队"));d.Teams.Add(new Team("美国北方5号队"));d = new Division("美国南方队");l.Divisions.Add(d);d.Teams.Add(new Team("美国南方1号队"));d.Teams.Add(new Team("美国南方2号队"));d.Teams.Add(new Team("美国南方3号队"));d.Teams.Add(new Team("美国南方4号队"));d.Teams.Add(new Team("美国南方5号队"));}}
数据准备好了。我们看MainWindow.xaml。
代码<Window.Resources><ObjectDataProvider x:Key="odp" ObjectType="{x:Type src:LeagueList}"></ObjectDataProvider><DataTemplate x:Key="dataList"><TextBlock Text="{Binding Path=Name}" FontSize="32" /></DataTemplate></Window.Resources>
这里我们需要引入xmln的命名空间
xmlns:src="clr-namespace:Demo"
下面我们在用DataTemplate来绑定具体的名字。这里我们可以对ListBox中的字体来设置他的属性。
代码<DockPanel Width="660" Height="400" DataContext="{StaticResource odp}"><TextBlock DockPanel.Dock="Top" FontSize="32" HorizontalAlignment="Center" FontWeight="Bold" Text="比赛队伍详情" /><DockPanel DockPanel.Dock="Left" Margin="10 0 10 0"><TextBlock DockPanel.Dock="Top" FontSize="32" FontWeight="Black" Text="哪个国家的队"/><ListBox ItemsSource="{Binding }" IsSynchronizedWithCurrentItem="True"ItemTemplate="{StaticResource dataList}"></ListBox></DockPanel><DockPanel DockPanel.Dock="Left" Margin="10 0 10 0"><TextBlock DockPanel.Dock="Top" FontSize="32" FontWeight="Black" Text="{Binding Path=Name}"/><ListBox ItemsSource="{Binding Divisions}" IsSynchronizedWithCurrentItem="True"ItemTemplate="{StaticResource dataList}"></ListBox></DockPanel><DockPanel DockPanel.Dock="Left" Margin="10 0 10 0"><TextBlock DockPanel.Dock="Top" FontSize="32" FontWeight="Black" Text="{Binding Divisions/Name}"/><ListBox ItemsSource="{Binding Divisions/Teams}" ItemTemplate="{StaticResource dataList}"></ListBox></DockPanel></DockPanel>
这里我们要设置ListBox的 IsSynchronizedWithCurrentItem="True" 属性。
扫码盒子怎么绑定、获取或设置指示 Selector 是否应当使 SelectedItem 与 Items 属性中的当前项保持同步的值。
这样按F5就可以运行了。