代码之家  ›  专栏  ›  技术社区  ›  rasx

带xmldataprovider和contentcontrol的WPF网格?

  •  0
  • rasx  · 技术社区  · 15 年前

    怎么了? DataTemplate x:Key="CellTemplate" 到达 DataContext 网格的 ContentControl ?

    <Page
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="WpfApplication1.Page1">
        <Page.Resources>
            <XmlDataProvider x:Key="xml">
                <x:XData>
                    <root xmlns="">
                        <foo a="one" />
                        <foo a="two" />
                        <foo a="three" />
                        <foo a="four" />
                    </root>
                </x:XData>
            </XmlDataProvider>
        </Page.Resources>
        <Grid DataContext="{Binding Mode=Default, Source={StaticResource xml}}">
            <Grid.Resources>
                <DataTemplate x:Key="CellTemplate">
                    <TextBlock Foreground="AntiqueWhite"
                               Text="{Binding Mode=Default, XPath=.}" />
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding XPath=.}" Value="three">
                            <Setter Property="TextBlock.FontWeight" Value="Bold" />
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </Grid.Resources>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <ContentControl Grid.Row="0" 
                ContentTemplate="{StaticResource CellTemplate}"
                DataContext="{Binding Mode=Default, XPath=/root/foo[1]/@a}" />    
            <ContentControl Grid.Row="1"
                ContentTemplate="{StaticResource CellTemplate}"
                DataContext="{Binding Mode=Default, XPath=/root/foo[2]/@a}" />    
            <ContentControl Grid.Row="2" 
                ContentTemplate="{StaticResource CellTemplate}"
                DataContext="{Binding Mode=Default, XPath=/root/foo[3]/@a}" />
            <ContentControl Grid.Row="3" 
                ContentTemplate="{StaticResource CellTemplate}"
                DataContext="{Binding Mode=Default, XPath=/root/foo[4]/@a}" />
        </Grid>
    </Page>
    
    1 回复  |  直到 13 年前
        1
  •  1
  •   Aviad P.    15 年前

    弄明白了,这很混乱,但是数据模板中的数据上下文被设置为内容控件的内容,而不是数据上下文。不要设置每个内容控件的数据上下文,而是设置其内容。

    例子:

    <ContentControl Grid.Row="1"
        ContentTemplate="{StaticResource CellTemplate}"
        Content="{Binding Mode=Default, XPath=/root/foo[1]/@a}" />
    

    或者,或者:

    <ContentControl Grid.Row="0" 
        ContentTemplate="{StaticResource CellTemplate}"
        DataContext="{Binding Mode=Default, XPath=/root/foo[1]/@a}" 
        Content="{Binding}" />