【问题标题】:WPF DataGridTextColumn binding and styleWPF DataGridTextColumn 绑定和样式
【发布时间】:2013-12-10 02:56:45
【问题描述】:

这里是交易:为数据网格设置 DataGridTextColumn 的文本块的样式。 我需要通过它的值格式化文本块,通过将它与另一个绑定值进行比较。

我想要实现的是这样的:

<Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=BEST}" Value="{RelativeSource Mode=Self}">
            <Setter Property="Background" Value="Green" />
        </DataTrigger>
    </Style.Triggers>
</Style> 

这是不可能的,因为 Datatrigger 的 Value 不能是相对来源。

所以我尝试了多重绑定

<Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}">
 <Style.Triggers>
  <DataTrigger Value="True">
    <DataTrigger.Binding>
      <MultiBinding Converter="{StaticResource IsValueEqualParameterConverter}">
        <Binding Path="BEST" />
        <Binding RelativeSource="{RelativeSource Mode=Self}" />
      </MultiBinding>
     </DataTrigger.Binding>
    </DataTrigger>
   </Style.Triggers>
</Style>

没有运气:textblock Text 属性为空,可能是因为在执行实际绑定之前应用了样式。

我没有更多的想法。

请帮帮我!

【问题讨论】:

  • 请尝试更清楚地解释您的要求。
  • 我需要将 DataGridTextColumn 的文本块的值与另一个绑定进行比较。为什么文本块总是空的?

标签: c# wpf xaml datagrid


【解决方案1】:

我结束了对我的代码的一些修改。 我没有依赖单元格的值,而是在“BEST”字段中传递了列的名称。 然后使用我检查的转换器 当前文本块(由@Sheridan 建议)-> DatagridCell -> 列标题 如果匹配,我会更改此文本块的样式。

谢谢大家!!!

【讨论】:

    【解决方案2】:

    我不确定这是否可行,但我注意到您忘记在 MultiConverter 示例中指定 Binding.Path...试试这个:

    <Style x:Key="ExpeditionerCellStyle" BasedOn="{StaticResource RightAlignStyle}" TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <DataTrigger Value="True">
                <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource IsValueEqualParameterConverter}">
                        <Binding Path="BEST" />
                        <Binding Path="Text" RelativeSource="{RelativeSource Mode=Self}" />
                    </MultiBinding>
                </DataTrigger.Binding>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

    • 不,绑定路径返回文本块本身,仍然没有文本 valorized
    • 怎样才能得到同样的结果?如果第一个结果是整个TextBlock,那么当Path 现在指向Text 属性时,你怎么能得到它?您是否正在查看 Converter 中的值?
    • 对不起。结果相同,我认为 texblock 文本属性仍然为空。我敢打赌这是因为在解析样式时,数据还没有真正绑定到控件
    • 好吧,如果我是你,我会确保控件中显示有数据你尝试编写任何需要该数据工作的Triggers 之前。
    【解决方案3】:

    如果您只想根据文本块的内容更改文本块的样式,为什么不直接在文本块背景中添加一个投标并使用转换器来检查文本的内容?

    换句话说,将文本和背景绑定到同一个源,并使用带有背景的转换器,并在转换器中匹配内容并返回正确的背景样式。

    如果您需要其他内容,请发表评论,以便我们更好地了解问题所在。

    【讨论】:

    • 问题是,我只能依赖运行时值。此样式绑定到多个列。
    • 这取决于样式是否依赖于同一底层对象的多个属性,您可以将样式绑定到对象本身并检查所有属性。至于运行时,所有转换器都使用运行时......
    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多