【问题标题】:In WPF XAML, How to Bind two properties in a textblock using datatrigger?在 WPF XAML 中,如何使用 datatrigger 在文本块中绑定两个属性?
【发布时间】:2017-09-05 06:19:38
【问题描述】:

如何使用 wpf xaml 中的 datatrigger 在文本块中绑定两个属性? 下面是我的 XAML 代码

<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
     <TextBlock.Style>
        <Style TargetType="TextBlock">
          <Style.Triggers>
             <DataTrigger Binding="{Binding StkTypeValue}" Value="Y">
                <Setter Property="Text" Value="{Binding AvailableQty }" />
                <Setter Property="Text" Value="{Binding PrimaryUM}" />
             </DataTrigger>
           </Style.Triggers>
         </Style>
   </TextBlock.Style>
</TextBlock>

【问题讨论】:

标签: c# wpf xaml mvvm


【解决方案1】:

我了解您希望在激活 DataTrigger 时显示这两个值。如果为 true,您可以将 MultiBinding 与 StringFormat 一起使用:

<TextBlock.Style>
<Style TargetType="TextBlock">
    <Style.Triggers>
        <DataTrigger Binding="{Binding StkTypeValue}" Value="Y">
            <Setter Property="Text">
                <Setter.Value>
                    <MultiBinding StringFormat="{}{0} - {1}">
                        <Binding Path="AvailableQty" />
                        <Binding Path="PrimaryUM" />
                    </MultiBinding>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

【讨论】:

    【解决方案2】:

    为此,您必须使用 MultiBindingIMultiValueConverter试试这个:

    <TextBlock.Style>
          <Style TargetType="TextBlock">
              <Style.Triggers>
                  <DataTrigger Binding="{Binding StkTypeValue}" Value="Y">
                       <Setter Property="Text">
                       <Setter.Value>
                          <MultiBinding Converter="{StaticResource textMultiBindingConverter}">
                            <Binding Path="AvailableQty " />
                            <Binding Path="PrimaryUM"/>
                          </MultiBinding>
                       </Setter.Value>
                     </Setter>
                 </DataTrigger>
              </Style.Triggers>
          </Style>
    </TextBlock.Style>
    

    Converter 定义为资源:

    <Window.Resources>
        <local:TextMultiBindingConverter x:Key="textMultiBindingConverter"/>
    </Window.Resources>
    

    还有你的Converter

    class TextMultiBindingConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            return (values[0].ToString() + values[1].ToString());
        }
    
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException("Cannot convert back");
        }
    }
    

    【讨论】:

    • 转换器textMultiBindingConverter怎么写?
    • 标记为答案.. 再次感谢
    • 事实如何,这个问题是重复的? stackoverflow.com/questions/541896/…
    • 嗨虎斑,你能帮我吗?如何为 telerik:GridViewDataColumn 编写触发器?
    • 问一个新问题,看看之前是否没有问过
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2014-05-28
    • 1970-01-01
    • 2011-12-03
    • 2023-01-16
    • 1970-01-01
    • 2016-10-28
    相关资源
    最近更新 更多