在我的应用程序中,我在一个xaml文件中有3个数据网格。根据用户选择,我想显示一个网格并隐藏其他网格。
在我的视图模型类中,我为每个网格都有布尔属性,并根据我将其设置为true或false的选择。但是所有网格都是可见的。
<DataGrid Visibility="{Binding Path=IsGridVisible}" >
在我的视图模型中,我设置了IsGridVisible值
public bool IsCapexGridVisible
{
get { return isCapexGridVisible; }
set { isCapexGridVisible = value; RaisePropertyChangedEvent("IsCapexGridVisible"); }
}
请提供您的想法。感谢
答案 0 :(得分:7)
您可以BooleanToVisibilityConverter将true
转换为System.Windows.Visibility.Visible
和false
转换为System.Windows.Visibility.Collapsed
。
因此,您可以获得此预制转换器的帮助,并且必须将其添加到资源中。
<BooleanToVisibilityConverter x:Key="BoolToVis"/>
在ViewModel中创建bool
类型的属性
bool _dgVisibility;
public bool DataGridVisibility
{
get { return _dgVisibility; }
set
{
_dgVisibility = value;
OnPropertyChanged("DataGridVisibility");
}
}
您可以按以下方式使用
<DataGrid Visibility="{Binding Path=DataGridVisibility, Converter={StaticResource BoolToVis}}"/>
答案 1 :(得分:2)
UIElement上的Visibility属性不是布尔值。这是一个有三个值的枚举:
折叠不显示元素,也不在布局中为其预留空间。
隐藏不显示元素,但为布局中的元素保留空间。
可见显示元素。
因此,为了从ViewModel正确设置它,你应该: - 使您的房产类型为可见性(不是世界上最好的解决方案) - 使用转换器进行绑定,这将完成将布尔值转换为可见性
的技巧 public class BooleanToCollapsedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (targetType == typeof(Visibility) && value is bool)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
throw new FormatException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}