XAML:DataTemplate中的自定义绑定以用于GridViewColumn CellTemplate

我希望在整个GridView中重用资源中的以下DataTemplate。

<Window.Resources>
  <DataTemplate x:Key="NumericalDataTemplate" DataType="GridViewColumn.CellTemplate">
     <StackPanel Orientation="Horizontal" Height="32">
       <TextBlock Text="{Binding MyLength}" VerticalAlignment="Center"
                     HorizontalAlignment="Center">
         <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}" >
               <Setter Property="Visibility" Value="Visible" />
               <Style.Triggers>
                 <DataTrigger Binding="{Binding PropertyEditable}" Value="True">
                    <Setter Property="Visibility" Value="Collapsed" />
                 </DataTrigger>
               </Style.Triggers>
           </Style>
         </TextBlock.Style>
       </TextBlock>
    </StackPanel>
  </DataTemplate>
</Window.Resources>

其实现如下。

<GridViewColumn Header="MyLength" Width="80" 
                CellTemplate="{StaticResource NumericalDataTemplate}" />

我想改变TextBlock的绑定(当前Text={Binding MyLength} ),以便它可以为每个GridViewColumn单元格模板(例如MyHeight,MyWeight等)使用自定义绑定。

我设想这样做的方式是将TextBlock的绑定更改为简单地使用{Binding}并将GridViewColumn设置为绑定。 但是,我不确定在何处或如何执行此操作,因为将DisplayMemberValue设置为{Binding MyLength} (例如)会简单地覆盖模板。

我希望完全在XAML中完成此操作。


当我们有DisplayMemberBinding属性集时, CellTemplate似乎总是被忽略。 可能的解决方法是通过创建@HB指出的标记扩展来解决此类限制。 创建标记扩展涉及C#/ VB代码,但使用它只需要XAML代码。

您可以重复使用@HB提供的相同标记扩展C#代码然后在您的XAML中使用它,声明命名空间前缀:

<Window ......
    xmlns:local="clr-namespace:WpfProject">

修改DataTemplate键和内部TextBlock绑定:

<DataTemplate x:Key="TemplateBuilder_BaseTemplate" DataType="GridViewColumn.CellTemplate">
    <StackPanel Orientation="Horizontal" Height="32">
        <TextBlock Text="{local:TemplateBuilderTag}" VerticalAlignment="Center"
                   HorizontalAlignment="Center">
            <TextBlock.Style>
                <Style TargetType="{x:Type TextBlock}" >
                    <Setter Property="Visibility" Value="Visible" />
                    <Setter Property="Foreground" Value="Red"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding PropertyEditable}" Value="True">
                            <Setter Property="Visibility" Value="Collapsed" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
    </StackPanel>
</DataTemplate>

现在,您可以使用相同的DataTemplate作为不同的列binidngs:

<GridView.Columns>
    <GridViewColumn Header="MyLength" Width="80"
            CellTemplate="{local:TemplateBuilder MyLength}" />
    <GridViewColumn Header="MyHeight" Width="80" 
            CellTemplate="{local:TemplateBuilder MyHeight}" />
</GridView.Columns>
链接地址: http://www.djcxy.com/p/44641.html

上一篇: XAML: Custom Binding in DataTemplate for use in GridViewColumn CellTemplate

下一篇: Binding ZIndex from DataTemplate