在WPF中访问TextBlock的值绑定TextProperty

时间:2011-02-06 14:05:33

标签: c# wpf xaml wpf-controls binding

我有两个TextBlock,其TextProperty绑定到类中的两个属性。即StackingText和StackingRate ...... 我希望如果StackingRate为null或为空,则StackingText应设置为null或为空,因为StackingText的默认值为“Is charge at”。

<TextBlock Name="stackingText"
           Margin="270,215,0,0"
           Text="{Binding Path=StackingText}"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           FontSize="14"
           Padding="5"/>
<TextBlock Name="stackingRate"
           Margin="270,215,0,0"
           Text="{Binding Path=StackingRate}"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           FontSize="14"
           Padding="5"/>

其实我正在打印这个页面,所以当stackingRate为空时,stackingText有价值是没有意义的。

3 个答案:

答案 0 :(得分:2)

您可以使用DataTrigger作为stackingText TextBlock,您可以在其中绑定到文本以获取stackingRate`TextBlock',如果值为“”(null或为空),则将Text设置为“ “还有。由于触发器的工作方式

,这也会使StackingText属性保持不变
<TextBlock Name="stackingText"
           Margin="270,215,0,0"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           FontSize="14"
           Padding="5">
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Setter Property="Text" Value="{Binding Path=StackingText}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=stackingRate, Path=Text}"
                             Value="">
                    <Setter Property="Text" Value=""/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
<TextBlock Name="stackingRate"
           Margin="270,215,0,0"
           Text="{Binding Path=StackingRate}"
           HorizontalAlignment="Left"
           VerticalAlignment="Top"
           FontSize="14"
           Padding="5"/>

答案 1 :(得分:1)

你可以在触发器中完成此任务,正如Meleak指出的那样。但是,如果你使用MVVM,你甚至不需要问这个问题。

我使用WPF越多,对我来说就越清楚,如果你只是实现一个视图模型,一切都会变得更简单。是的,总是要编写

之类的内容有点乏味
public string StackingText
{
   get { return _Model.StackingText; }
}

一遍又一遍地支持一个观点。 (如果C#有一个自动实现视图模型getter和setter的小语法结构,那就太好了。)但是一旦你有了这个,很明显如何修改它来注入逻辑:

public string StackingText
{
   get 
   { 
      return _Model.StackingRate == 0
         ? null
         : _Model.StackingText; 
   }
}

答案 2 :(得分:1)

一个简单的可重用解决方案是编写一个转换器,它将默认字符串作为参数。此转换器可以决定仅在设置费率时显示文本。

更新:

有关如何执行此操作的示例,请查看以下问题: Conditional element in xaml depending on the binding content