문제

다음 스택 패널이 있습니다

<StackPanel>
                <TextBlock Text="{Binding AddressLine1}" />
                <TextBlock Text="{Binding AddressLine2}" />
                <TextBlock Text="{Binding AddressLine3}"  />
                <TextBlock Text="{Binding AddressLine4}"  />
</StackPanel>

그리고 내 주소 라인 2 문자열은 바운드 객체에서 null입니다.

내 스택 패널은 렌더링됩니다

| AddressLine1 |
|              |
| AddressLine3 |
| AddressLine4 |

그러나 나는 그것이 렌더링하기를 원합니다

| AddressLine1 |
| AddressLine3 |
| AddressLine4 |

이것이 가능합니까, 아니면 명백한 방법을 놓치고 있습니까?

고마워요, 크리스

도움이 되었습니까?

해결책

ImultivalueConverter를 구현하는 변환기를 만듭니다. 그런 다음 텍스트의 멀티 핀딩을 사용하여 다음과 같이 각 줄에 하나의 텍스트 블록 만 갖습니다.

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>

다른 팁

ValueConverter를 사용하여 텍스트 블록의 가시성을 텍스트 속성에 바인딩 할 수 있습니다.

TextBlock의 트리거를 사용하여 텍스트가 null인지 확인 하고이 경우 붕괴 된 가시성을 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top