MasterDetail主从绑定

实现效果:

clipboard.png

clipboard.png

关键词:

  1. IsSynchronizedWithCurrentItem

xaml代码:

<DockPanel DataContext="{Binding Source={StaticResource MyList}}">
    <StackPanel>
        <Label>My Soccer Leagues</Label>
        <ListBox ItemsSource="{Binding}"
           IsSynchronizedWithCurrentItem="true"/>
    </StackPanel>
    
    <StackPanel>
        <Label Content="{Binding Path=Name}"/>
        <ListBox ItemsSource="{Binding Path=Divisions}"
           IsSynchronizedWithCurrentItem="true"/>
    </StackPanel>
    <StackPanel>
        <Label Content="{Binding Path=Divisions/Name}"/>
        <ListBox ItemsSource="{Binding Path=Divisions/Teams}"/>
    </StackPanel>
    </DockPanel>

扩展:

  1. 如果 SelectedItem 始终与 ItemCollection 中的当前项保持同步,则为 true;如果 SelectedItem 从不与当前项保持同步,则为 false;如果 SelectedItem 只有在 Selector 使用 CollectionView 时才与当前项保持同步,则为 null。默认值为null。
  2. 可以将 IsSynchronizedWithCurrentItem 属性设置为 true 以确保选定的项始终对应于 ItemCollection 中的 CurrentItem 属性。 例如,假定有两个 ListBox 控件,这两个控件的 ItemsSource 属性设置为相同源。对这两个列表框将 IsSynchronizedWithCurrentItem 设置为 true 以确保在每个 ListBox 中的选定项相同。

主从绑定XML数据源

实例与上述效果以下,但是绑定源为XML

<XmlDataProvider x:Key="MyList" Source="Data\Leagues.xml"
                       XPath="Leagues/League"/>

xaml界面:

<DockPanel DataContext="{Binding Source={StaticResource MyList}}">
    <StackPanel>
        <Label>My Soccer Leagues</Label>
        <ListBox ItemsSource="{Binding}"
             ItemTemplate="{StaticResource DataTemplateX}"
             IsSynchronizedWithCurrentItem="true"/>
    </StackPanel>

    <StackPanel>
        <Label Content="{Binding XPath=@name}"/>
        <ListBox Name="divisionsListBox"
             ItemsSource="{Binding XPath=Division}"
             ItemTemplate="{StaticResource DataTemplateX}"
             IsSynchronizedWithCurrentItem="true"/>
    </StackPanel>
    <StackPanel>
        <Label Content="{Binding XPath=@name}"/>
        <ListBox DataContext="{Binding ElementName=divisionsListBox,
                                   Path=SelectedItem}"
             ItemsSource="{Binding XPath=Team}"
             ItemTemplate="{StaticResource DataTemplateX}"/>
    </StackPanel>
</DockPanel>

第二个ListBox中:
Label Content="{Binding XPath=@name}"中Content绑定的为当前数据源选定项的name特性,路径使用XPath,值表示为@name。
ItemsSource="{Binding XPath=Division}"中绑定源路径XPath值设为Division节点
第三个ListBox中:
DataContext="{Binding ElementName=divisionsListBox,指数据上下文重新设为第二个ListBox选定的数据。ItemsSource绑定路径设为Team节点。数据模板显示为name特性的值

                                   Path=SelectedItem}"

XML中绑定数据的模板须有以下,

<DataTemplate x:Key="DataTemplateX">
    <TextBlock Text="{Binding XPath=@name}" />
</DataTemplate>

扩展:

  1. 如果绑定源是 XML 数据而不是公共语言运行时 (CLR) 对象,则使用 XPath 属性(而不是 Path 属性)来指示要使用的绑定源的值的路径。
  2. 通过设置 XPath 属性,将创建一个 XPath 查询来选择节点或节点集合。

李志玮
22 声望34 粉丝

求索~~


引用和评论

0 条评论