我有两个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有价值是没有意义的。
答案 0 :(得分:2)
您可以使用DataTrigger
作为stackingText TextBlock
,您可以在其中绑定到文本以获取stackingRate`TextBlock',如果值为“”(null或为空),则将Text设置为“ “还有。由于触发器的工作方式
<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