さて、これが私のXAMLです。
<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>
InstanceName
がnullまたは空の文字列の場合、必要ですVisibility="Collapsed"
。そうでなければ私は欲しいVisibility="Visible"
。どうすればいいですか?
さて、これが私のXAMLです。
<TextBlock Text="{Binding Path=InstanceName}"></TextBlock>
InstanceName
がnullまたは空の文字列の場合、必要ですVisibility="Collapsed"
。そうでなければ私は欲しいVisibility="Visible"
。どうすればいいですか?
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;
}
}
(データ)テンプレート内にいる場合は、そのためのトリガーを使用できます。
それ以外の場合は、MVVM-PatternまたはValueConverterが役立ちます。
ビューモデルに追加のプロパティを配置することで、Visibility属性を次のようにバインドできます。
public class ViewModel
{
public string InstanceName {...}
public Visibility InstanceVisibility
{
get
{
return String.IsNullOrEmpty(InstanceName) ? Visibility.Collapsed : Visibility.Visible;
}
}
<TextBlock Text="{Binding Path=InstanceName},FallbackValue={x:Null}"></TextBlock>
次に、DataTrigger を追加して値が null であることを確認し、Setter を使用して可視性を変更します。これは私が使用している簡単な方法です。
OK、これは PyBinding に近いです:
<TextBlock Text="{Binding Path=InstanceName}" Visibility="{p:PyBinding BooleanToVisibility(IsNotNull($[.InstanceName]))}" ></TextBlock>
IsNotNull を IsNotNullOrEmpty を意味するものに置き換える必要がありますが、近づいています。