我想在属性不为null时显示一些元素。实现这一目标的最佳方式是什么?
以下是我的ViewModel:
class ViewModel : ViewModelBase
{
public Trade Trade
{
get { return _trade; }
set { SetField(ref _trade, value, () => Trade); }
} private Trade _trade;
}
ViewModelBase继承INotifyPropertyChanged并包含SetField()
以下是贸易类:
public class Trade : INotifyPropertyChaged
{
public virtual Company Company
{
get { return _company; }
set { SetField(ref _company, value, () => Company); }
} private Company _company;
......
}
这是我的View.xaml
的一部分 <GroupBox Visibility="{Binding Path=Trade.Company,
Converter={StaticResource boolToVisConverter}}" />
我希望只有当Trade.Company不为null时才显示此组框(因此当用户选择公司时)。我是否需要创建一个自定义转换器来检查null并返回正确的可见性,还是.NET中有一个?
答案 0 :(得分:3)
不是使用BooleanToVisibilityConverter
,而是需要使用不同的转换器(您必须编写的转换器),如果绑定值为null,则返回适当的可见性值。
这样的事情:
public class NullValueToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
return (value != null ? Visibility.Visible : Visibility.Collapsed);
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
return null; // this shouldn't ever happen, since
// you'll need to ensure one-way binding
}
}
您需要将Mode = OneWay
添加到绑定中,因为您将无法进行往返转换。
答案 1 :(得分:3)
如果没有转换器,你也可以使用DataTriggers做同样的事情......
<GroupBox DataContext="{Binding Path=Trade.Company}">
<GroupBox.Style TargetType="GroupBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=.}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</GroupBoxStyle>
</GroupBox>