【问题标题】:Can't update textbox property using DataBinding无法使用 DataBinding 更新文本框属性
【发布时间】:2009-06-18 16:53:04
【问题描述】:

我有一个自定义窗口,它有两个依赖属性:布尔值? ValidationStatus 和字符串 ValidationMessage。绑定这些属性可以正常工作,但是当这些值更改时似乎不会触发触发器。我做错了什么?

<TextBlock x:Name="validationTextBox" 
    Grid.Row="1" 
    Grid.ColumnSpan="2" 
    Text="{Binding ElementName=_this, Path=ValidationMessage}"
    TextAlignment="Center"
    Background="Green">

    <TextBlock.Style>
      <Style>
        <Style.Triggers>
          <DataTrigger Value="False" Binding="{Binding ElementName=_this, Path=ValidationStatus}">
            <Setter Property="Panel.Background" Value="Red"/>
            <Setter Property="TextBox.Text" Value="Outer checkbox is not checked"/>
          </DataTrigger>
        </Style.Triggers>
      </Style>
    </TextBlock.Style>

</TextBlock>

【问题讨论】:

    标签: wpf data-binding binding textblock


    【解决方案1】:

    样式设置器不会覆盖本地属性设置。因此,数据触发器的值将被忽略,因为您已在 TextBlock 上指定了 Text 和 Background 属性。要解决此问题,请在样式中设置这些属性的默认值,如下代码所示:

    <TextBlock x:Name="validationTextBox" 
               Grid.Row="1" 
               Grid.ColumnSpan="2" 
               TextAlignment="Center">
    
    <TextBlock.Style>
      <Style>
        <Setter Property="TextBox.Text" Value="{Binding ElementName=_this, Path=ValidationMessage}"/>
        <Setter Property="TextBox.Background" Value="Green"/>
        <Style.Triggers>
          <DataTrigger Value="False" Binding="{Binding ElementName=_this, Path=ValidationStatus}">
            <Setter Property="TextBox.Background" Value="Red"/>
            <Setter Property="TextBox.Text" Value="Outer checkbox is not checked"/>
          </DataTrigger>
        </Style.Triggers>
      </Style>
    </TextBlock.Style>
    

    【讨论】:

    • 谢谢,你说得对,虽然我发现你的例子中的一件事不起作用,背景没有更新。为了使它工作,我不得不将“Panel.Background”更改为“TextBlock.Background”。
    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2015-04-12
    • 2018-11-26
    相关资源
    最近更新 更多