是否有可能参数在资源DataGrid中CellTemplate的结合?(Is it possible

2019-09-18 18:23发布

我把在一起了一些通用的CellTemplate风格为WPF网格(WPFToolKit DataGrid中),我不知道语法的使用,使结合通用。 因此,例如,我有这个模板,它变成了红色的值,如果该值为负:

<DataTemplate x:Key="RedNegativeCellTemplate">
    <TextBlock Name="QuantityTextBox" Text="{Binding Quantity, StringFormat='c', Mode=OneWay}"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Quantity, Converter={StaticResource SignConverter}}" Value="-1">
            <Setter TargetName="QuantityTextBox" Property="Foreground" Value="Red"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

你会发现,这有一个文本框的列值“ ”结合-即场/列的绑定来自是明确的。

因此,我可以在我的WPF DataGrid中按如下方式使用这样的:

<sdk:DataGrid ItemsSource="{Binding MyDataSource}" AutoGenerateColumns="False">
    <sdk:DataGrid.Columns>

        <sdk:DataGridTemplateColumn Header="Net Quantity" CellTemplate="{StaticResource RedNegativeCellTemplate}"/>

    </sdk:DataGrid.Columns>
</sdk:DataGrid>

但是......我真的很想做的是让现场的模板结合通用的,这样我就可以重新使用模板如下:

<sdk:DataGrid ItemsSource="{Binding OrdersQuery}"AutoGenerateColumns="False">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTemplateColumn Header="Quantity" CellTemplate="{StaticResource RedNegativeCellTemplate}"/>
        <sdk:DataGridTemplateColumn Header="Price" CellTemplate="{StaticResource RedNegativeCellTemplate}"/>
        <sdk:DataGridTemplateColumn Header="Total" CellTemplate="{StaticResource RedNegativeCellTemplate}"/>
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

现在,这里的问题是,似乎没有被参数化的CellTemplate结合的方式。 但我不愿意要有3+线的ControlTemplate为使用该模板的每一列,因为它杂波的XAML,并使其远不如可读(不提的是,如果我决定改变细胞模板把围绕文本框的边框,我不得不改变它在多个地方。

所以我想,在CellTemplate内的结合应该是这个样子(请注意,我们使用的绑定路径“”):

            Text="{Binding Path=., StringFormat='c', Mode=OneWay}"

然后以某种方式设置为从DataGridTemplateColumn声明DataContext的 - 但我看不出如何做到这一点。

任何想法如何做到这一点?

Answer 1:

为此,您可以使用DataTemplateSelector这其实是非常简单的实现。
如果你需要一些进一步的解释和例子 - 让我知道。



Answer 2:

@Webreaper:如果我正确理解你的想法,那么你和我正在运行到同样的东西。 我没有试过我的版本的解决方案,基本上,我会的结合DataGridTemplateColumn的SortMemberPath路径属性绑定。

<DataGrid>
....
     <DataGridTemplateColumn CellTemplate={StaticResource CellTemplateKey} />
....
</DataGrid>

凡CellTemplateKey某处定义(在App.xaml中为例):

<DataTemplate x:Key="CellTemplateKey">
    <TextBlock Binding="{Binding Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}, Path={Binding Source={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridTemplateColumn, Path=SortMemberPath}}}}" />
</DataTemplate>

我查一下,后来更新此。 我希望这个想法是有帮助的莫名其妙。 我可以看看敦南



文章来源: Is it possible to parameterize the binding on a DataGrid CellTemplate in a resource?