1

Windows phone でデータをテキスト ブロックにバインドしているときに混乱していると聞きました

私はテキストブロックを持っています

<TextBlock Name="strytxt"
           Text="{Binding STORY}" 
            Height="auto" 
            Width="Auto" 
            TextWrapping="Wrap"/>

STORYオブジェクトで、その時点で空/ヌルの値があるとき、UIにスペースを取得しています

その行でNullを取得した場合、テキストボックスを折りたたんで表示したいのですが、どうすればよいですか

4

2 に答える 2

3

Binding 値が null のときに TextBlock の Visibility を変更するには、null/not null から Visible/Collapsed に変換する Converter を使用する必要があります。

値を変換するコンバーターです。コンバーターは空の文字列を null として処理するためCollapsedstring.empty.:

public class NullToVisibilityConverter : IValueConverter {

  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {

    bool isVisible = value == null ? false : true;

    if (isVisible) {
      string stringValue = value as string;
      if (stringValue != null) {
        isVisible = string.IsNullOrEmpty(stringValue) ? false : true;
      }
    }

    if (System.ComponentModel.DesignerProperties.IsInDesignTool) {
      return Visibility.Visible;
    }

    return isVisible ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
  }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            throw new NotImplementedException();
        }
    }

次のように、コンバーターを TextBlock に適用できます。

<UserControl.Resources>
  <local:NullToVisibilityConverter x:Key="NullToVisibilityConverter"/>
</userControl.Resources>

<TextBlock Name="strytxt"
           Visibility="{Binding STORY, Converter={StaticResource nullToVisibilityConverter}}"/>

別の代替手段は、値が null の場合に Text を表示することです。バインディングで指定できます。

<TextBlock Name="strytxt"
           Text="{Binding STORY, TargetNullValue='is Null'}"/>
于 2013-07-16T06:58:22.877 に答える
1

値コンバーターを使用して、値を可視性に変換できます。

public class NullToVisibiltyConverter : IValueConverter {

  public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) {
    return value == null ? Visibility.Collapsed : Visibility.Visible;
  }

  public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) {
    throw new NotImplementedException();
  }

}

次に、コンバーターを使用して をVisibilityバインドします。TextBlock

<TextBlock Name="strytxt"
  Text="{Binding STORY}" 
  Height="auto" 
  Width="Auto" 
  TextWrapping="Wrap"
  Visibility="{Binding STORY, Converter={StaticResource NullToVisibilityConverter}}"/>

バインディングで参照できるようにするには、コンバーターのインスタンスをリソース ディクショナリに追加する必要があります。

<UserControl.Resources>
  <local:NullToVisibilityConverter x:Key="NullToVisibilityConverter"/>
</userControl.Resources>
于 2013-07-16T07:00:03.930 に答える