Wpf 是否可以参数化资源中DataGrid CellTemplate上的绑定?

Wpf 是否可以参数化资源中DataGrid CellTemplate上的绑定?,wpf,xaml,binding,datagrid,celltemplate,Wpf,Xaml,Binding,Datagrid,Celltemplate,我正在为WPF网格(WPFToolKit DataGrid)组合一些通用的CellTemplate样式,但我不确定用于使绑定通用的语法。例如,我有一个模板,如果值为负值,它会将值变为红色: <DataTemplate x:Key="RedNegativeCellTemplate"> <TextBlock Name="QuantityTextBox" Text="{Binding Quantity, StringFormat='c', Mode=OneWay}"/>

我正在为WPF网格(WPFToolKit DataGrid)组合一些通用的CellTemplate样式,但我不确定用于使绑定通用的语法。例如,我有一个模板,如果值为负值,它会将值变为红色:

<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>
然后以某种方式从DataGridTemplateColumn声明中设置datacontext,但我看不出该怎么做

你知道怎么做吗

对于这一点,您可以使用它,它实际上非常容易实现。

如果你需要更多的解释和例子,请告诉我。

@Webreaper:如果我正确理解了你的想法,那么你和我遇到了同样的问题。我还没有尝试我的解决方案版本,基本上,我将绑定的path属性绑定到DataGridTemplateColumn的SortMemberPath

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

....
....
其中CellTemplateKey是在某处定义的(例如在App.xaml中):



我稍后会检查并更新此内容。我希望这个想法能有所帮助。我可能会研究Dyna

这是一个困难的问题,一个可能的想法可能是创建一个名为ParameterizedDataGridTemplateColumn的类,只添加一个名为say ContentBindingName的DependencyProperty,然后在datatemplate内使用relativesource绑定。这将是困难的,尽管继承DataGridTemplateColumn不是很直接哦,这很好。那么本质上写一个DataTemplateSelector并将其分配给XAML中的CellTtemplateSelector,它就可以基于某种逻辑以编程方式应用正确的模板了?唯一的问题是,逻辑必须在DataTemplateSelector中的代码隐藏中,还是可以使用触发器或类似的东西在XAML中定义逻辑?如果你有任何例子,我将不胜感激。
<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>
            Text="{Binding Path=., StringFormat='c', Mode=OneWay}"
<DataGrid>
....
     <DataGridTemplateColumn CellTemplate={StaticResource CellTemplateKey} />
....
</DataGrid>
<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>