我有以下堆栈面板
<StackPanel>
<TextBlock Text="{Binding AddressLine1}" />
<TextBlock Text="{Binding AddressLine2}" />
<TextBlock Text="{Binding AddressLine3}" />
<TextBlock Text="{Binding AddressLine4}" />
</StackPanel>
并且我的AddressLine2字符串在绑定对象上为null。
我的堆栈面板呈现类似
| AddressLine1 |
| |
| AddressLine3 |
| AddressLine4 |
但我希望它像
一样呈现| AddressLine1 |
| AddressLine3 |
| AddressLine4 |
这是可能的,还是我错过了一种明显的方法呢?
谢谢, 克里斯
答案 0 :(得分:2)
创建一个实现IMultiValueConverter的转换器,然后在文本上使用MultiBinding,这样每行只有一个TextBlock,如下所示:
class MultiStringConverter : IMultiValueConverter
{
public object Convert( object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
var text = new StringBuilder( );
for ( int i = 0 ; i < values.Length ; i++ ) {
string line = String.Format( "{0}", values[i] );
if ( !String.IsNullOrEmpty( line ) ) {
text.AppendLine( line );
} // if
}
return text.ToString( );
}
public object[] ConvertBack( object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture )
{
throw new NotImplementedException( );
}
}
在XAML ......
<TextBlock>
<TextBlock.Text>
<MultiBinding>
<MultiBinding.Converter>
<Local:MultiStringConverter />
</MultiBinding.Converter>
<Binding Path="AddressLine1" />
<Binding Path="AddressLine2" />
<Binding Path="AddressLine3" />
<Binding Path="AddressLine4" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
答案 1 :(得分:0)
您可以使用ValueConverter
将TextBlock的可见性绑定到Text属性答案 2 :(得分:0)
您可以使用Trigger for TextBlock检查Text是否为null,并在这种情况下将Visibility设置为Collapsed。