使用触发器设置或更改转换器?

时间:2013-04-03 07:00:59

标签: wpf xaml data-binding datatrigger

这是带有转换器的TextBox:

 <TextBox Text="{Binding TimbraturaSelezionata.OrarioMinuti, Converter={StaticResource Minuti2HHmmConverter}}" Margin="5,0"/>

我只是在有效需要时才搜索设置或更改转换器的方法。 实际上,我想将TextBox放在通用用户控件中,并仅在满足特定条件时应用转换器。 我想到的唯一解决方案是使用 ContentControl 并使用两个 DataTrigger 来设置其模板,一个在TextBox中使用Converter,另一个没有。我希望找到一种更清晰的方法来实现我的目标。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

因为你设置了一个触发器。这是一个例子。希望它有所帮助;

<TextBox x:Name="MyTextBox" Text="{Binding TimbraturaSelezionata.OrarioMinuti}" Margin="5,0">
    <i:Interaction.Triggers>
      <ei:DataTrigger Value="False"
                      Binding="{Binding YourCondition, ElementName=MyTextBox}">
          <ei:ChangePropertyAction PropertyName="Text"
                                   Value="{Binding TimbraturaSelezionata.OrarioMinuti}" />
      </ei:DataTrigger>
      <ei:DataTrigger Value="True"
                      Binding="{Binding YourCondition, ElementName=MyTextBox}">
          <ei:ChangePropertyAction PropertyName="Text"
                                   Value="{Binding TimbraturaSelezionata.OrarioMinuti, Converter={StaticResource Minuti2HHmmConverter}}" />
       </ei:DataTrigger>
    </i:Interaction.Triggers>
</TextBox>

答案 1 :(得分:0)

另一个有效的解决方案如下:

<TextBox  Width="100">
            <TextBox.Style>
                <Style TargetType="{x:Type TextBox}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding   ValoreInMinuti}" Value="True">
                            <Setter Property="Background" Value="Red" />
                            <Setter Property="Text" Value="{Binding Quantita, Converter={StaticResource Minuti2HHmmConverter}}" />    
                        </DataTrigger>
                        <DataTrigger Binding="{Binding   ValoreInMinuti}" Value="False">
                            <Setter Property="Background" Value="Yellow" />
                            <Setter Property="Text" Value="{Binding Quantita}" />

                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>

请注意,Text属性仅通过DataTrigger设置。在我的具体情况下,我只有两种可能性,一种是转换器,另一种是不带转换器。