17

さて、これが私のXAMLです。

<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>

InstanceNameがnullまたは空の文字列の場合、必要ですVisibility="Collapsed"。そうでなければ私は欲しいVisibility="Visible"。どうすればいいですか?

4

5 に答える 5

48

ValueConverter を使用できます。

<TextBlock 
     Visibility="{Binding InstanceName, Converter={local:StringNullOrEmptyToVisibilityConverter}}" 
     Text="{Binding InstanceName}"/>

次の分離コードを使用します。

public class StringNullOrEmptyToVisibilityConverter : System.Windows.Markup.MarkupExtension, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return string.IsNullOrEmpty(value as string) 
            ? Visibility.Collapsed : Visibility.Visible;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
    public override object ProvideValue(IServiceProvider serviceProvider)
    {            
        return this;
    }
}
于 2010-01-23T17:00:59.380 に答える
3

(データ)テンプレート内にいる場合は、そのためのトリガーを使用できます。

それ以外の場合は、MVVM-PatternまたはValueConverterが役立ちます。

于 2010-01-23T10:14:23.770 に答える
2

ビューモデルに追加のプロパティを配置することで、Visibility属性を次のようにバインドできます。

public class ViewModel
{
   public string InstanceName {...}
   public Visibility InstanceVisibility 
   { 
      get 
      {
           return String.IsNullOrEmpty(InstanceName) ? Visibility.Collapsed : Visibility.Visible;
      }
}
于 2010-01-23T10:13:56.517 に答える
1
<TextBlock Text="{Binding Path=InstanceName},FallbackValue={x:Null}"></TextBlock>

次に、DataTrigger を追加して値が null であることを確認し、Setter を使用して可視性を変更します。これは私が使用している簡単な方法です。

于 2010-01-23T10:40:22.803 に答える
0

OK、これは PyBinding に近いです:

<TextBlock Text="{Binding Path=InstanceName}" Visibility="{p:PyBinding BooleanToVisibility(IsNotNull($[.InstanceName]))}"  ></TextBlock>

IsNotNull を IsNotNullOrEmpty を意味するものに置き換える必要がありますが、近づいています。

于 2010-01-25T01:46:08.153 に答える