我在视图模型中有一个对象,它有一堆属性,其中一些偶尔会为空。我不想只显示一些控件,如果这些控件是空的。如果绑定为空,我将如何隐藏控件?我在想某种转换器,但不知道我会怎么做。有什么想法吗?编辑:对不起,我应该提到,这也将在Silverlight中,所以我不知道如果风格触发器将工作.?
drnojrws1#
这种方法更容易:
<CheckBox Visibility="{Binding Path=checkedField, TargetNullValue=Collapsed }">
当绑定属性checkedField为null时,可见性将被设置为Collapsed。
checkedField
kyxcudwk2#
有一个转换器如下,
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>
ckx4rj1h3#
我也需要一个WindowsPhone WinRT应用程序。最后,我使用了@ eAshitaka的转换器,并按照this answer to a similar question中的建议对绑定进行了微小的修改您应该使用FallbackValue=Collapsed来避免在上下文为null时精确显示控件。不知道为什么TargetNullValue=Collapsed不适合我。
FallbackValue=Collapsed
TargetNullValue=Collapsed
Visibility="{Binding Converter={StaticResource NullToVisibilityConverter}, FallbackValue=Collapsed}"
rpppsulh4#
在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>
yws3nbqq5#
您可以使用DataContextChanged事件,当DataContext为null时,您可以将Visbility设置为Collapsed阅读更多关于它here
DataContextChanged
Collapsed
fnatzsnv6#
需要这个,但是我不能让它在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>
kwvwclae7#
结合bugfixr的答案和Phil的答案,我得出了(WPF):
<Button Name="Button1" Click="Button1_Click" Content="{Binding Path=ActiveSubJob.ButtonText[0]}" Visibility="{Binding Path=ActiveSubJob.ButtonText[0], Converter={StaticResource AlwaysVisibleConverter}, FallbackValue=Collapsed, TargetNullValue=Collapsed}" IsEnabled="{Binding Path=IsButton1Enabled}" />
不得不调整Phil的AlwaysVisibleConverter的Convert方法,以使TargetNullValue正确工作:
AlwaysVisibleConverter
Convert
TargetNullValue
public object? Convert(object? value, Type targetType, object parameter, CultureInfo culture) { if (value is null) { return null; } return Visibility.Visible; }
7条答案
按热度按时间drnojrws1#
这种方法更容易:
当绑定属性
checkedField
为null时,可见性将被设置为Collapsed。kyxcudwk2#
有一个转换器如下,
现在,将该属性与Visibility属性绑定。比如
ckx4rj1h3#
我也需要一个WindowsPhone WinRT应用程序。最后,我使用了@ eAshitaka的转换器,并按照this answer to a similar question中的建议对绑定进行了微小的修改
您应该使用
FallbackValue=Collapsed
来避免在上下文为null时精确显示控件。不知道为什么TargetNullValue=Collapsed
不适合我。rpppsulh4#
在Silverlight中,你可以使用下一个方法-添加触发器到控件:
yws3nbqq5#
您可以使用
DataContextChanged
事件,当DataContext为null时,您可以将Visbility设置为Collapsed
阅读更多关于它here
fnatzsnv6#
需要这个,但是我不能让它在DataGridTemplateColumn内的DataTemplate中工作,所以下面是我如何让它工作的示例。
kwvwclae7#
结合bugfixr的答案和Phil的答案,我得出了(WPF):
不得不调整Phil的
AlwaysVisibleConverter
的Convert
方法,以使TargetNullValue
正确工作: