如果底层DataContext为null,如何隐藏控件?

Har*_*rry 23 c# silverlight wpf datacontext binding

我的视图模型中有一个对象,它有一堆属性,其中一些偶尔会为null.如果这些特定控件为null,我不想只显示一些控件.如果绑定为null,我将如何隐藏控件?我在想某种转换器,但不知道我是怎么做的.有任何想法吗?

编辑:对不起,我应该提一下,这也将在Silverlight中,所以我不确定Style触发器是否会起作用......?

bug*_*ixr 37

这种方法更容易:

<CheckBox Visibility="{Binding Path=checkedField, TargetNullValue=Collapsed }">
Run Code Online (Sandbox Code Playgroud)

当bound属性checkedField为null时,Visibility将设置为Collapsed.

  • 如果不是`checkedField`但是`obj`(带有'obj.checkedField`)为null则使用point-syntax for`Path` property` <CheckBox Visibility ="{Binding Path =.,TargetNullValue = Collapsed}">` (3认同)
  • -1如果`checkedField`不是`Visibility`,则抛出异常。 (2认同)

Pri*_*aka 26

有一个如下的转换器,

public sealed class NullToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null ? Visibility.Hidden: Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,也可以使用Visibility属性绑定该属性.喜欢,

<ListBox ItemsSource="{Binding Path=Squad}" 
         Visibility="{Binding Converter={StaticResource nullToVisibilityConverter}, 
                              Path=Squad}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)


Cam*_*nez 5

我还需要一个WindowsPhone WinRT应用程序.我最终使用@PrinceAshitaka的转换器,对绑定进行了一些小修改,如同对类似问题的回答中所建议的那样

您应该使用FallbackValue=Collapsed以避免在datacontext为null时精确显示控件.不知道为什么TargetNullValue=Collapsed不适合我.

Visibility="{Binding Converter={StaticResource NullToVisibilityConverter}, FallbackValue=Collapsed}"
Run Code Online (Sandbox Code Playgroud)