我的视图模型中有一个对象,它有一堆属性,其中一些偶尔会为null。如果这些特定控件为null,我不想只显示一些控件。如果绑定为null,我将如何隐藏控件?我在想某种转换器,但不知道我是怎么做的。有什么想法吗?
编辑:对不起,我应该提一下,这也将在Silverlight中,所以我不确定Style触发器是否会起作用......?
答案 0 :(得分:36)
这种方法更容易:
<CheckBox Visibility="{Binding Path=checkedField, TargetNullValue=Collapsed }">
当绑定属性checkedField
为空时,可见性将设置为折叠。
答案 1 :(得分:25)
有一个如下的转换器,
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();
}
}
现在,也可以使用Visibility属性绑定该属性。像,
<ListBox ItemsSource="{Binding Path=Squad}"
Visibility="{Binding Converter={StaticResource nullToVisibilityConverter},
Path=Squad}">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 2 :(得分:5)
我还需要这个用于WindowsPhone WinRT应用程序。我最终使用@PrinceAshitaka's converter对this answer to a similar question
中建议的绑定进行了少量修改当datacontext为null时,您应该使用FallbackValue=Collapsed
来避免精确显示控件。不确定为什么TargetNullValue=Collapsed
对我不起作用。
Visibility="{Binding Converter={StaticResource NullToVisibilityConverter}, FallbackValue=Collapsed}"
答案 3 :(得分:3)
在Silverlight中,您可以使用下一个方法 - 添加触发器来控制:
<i:Interaction.Triggers>
<core:DataTrigger Binding="{Binding SomeProperty}" Comparison="Equal" Value="{x:Null}">
<core:ChangePropertyAction PropertyName="Visibility" Value="Collapsed" />
</core:DataTrigger>
</i:Interaction.Triggers>
答案 4 :(得分:2)
您可以使用DataContextChanged
事件,当DataContext为null时,您可以将可见性设置为Collapsed
详细了解here
答案 5 :(得分:0)
需要这个,但是我无法让它在DataGridTemplateColumn中的DataTemplate中工作,所以这是我如何让它工作的例子。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=DataContext.AvailableHierarchies,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ItemsControl}} }"
DisplayMemberPath="Name"
SelectedItem="{Binding Path=DataContext.SelectedHierarchy,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ItemsControl}},UpdateSourceTrigger=PropertyChanged }"
>
<ComboBox.Style>
<Style TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}">
<Style.Triggers>
<Trigger Property="ComboBox.ItemsSource" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>