0

次のスタックパネルがあります

<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 |

これは可能ですか、それを行うための明らかな方法がありませんか?

ありがとう、クリス

4

3 に答える 3

2

IMul​​tiValueConverter を実装するコンバーターを作成し、テキストに MultiBinding を使用して、次のように各行に TextBlock が 1 つだけになるようにします。

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>
于 2009-12-03T19:52:41.577 に答える
0

Text が null かどうかを確認するために TextBlock のトリガーを使用し、その場合は Visibility を Collapsed に設定できます。

于 2009-12-03T19:44:52.233 に答える