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