控制多个网格可见性

时间:2016-10-19 09:05:13

标签: c# .net wpf mvvm

我有一个WPF应用程序。它包含相当多的网格。我正在使用(尝试)MVVM模式。

因此,在我的视图模型中,我有System.Windows.Visibility属性来控制网格是可见还是折叠。一切正常。

但是说我有50个网格。我只希望一次看到一个。所以说启动时的应用程序显示grid1。然后用户单击一个按钮,这意味着grid2现在应该可见,grid1应该崩溃。

我可以使用下面的代码执行此操作,但我觉得这样做很差,因为它不是很容易扩展

    void GridSelector(string gridName)
    {
        if(gridName == "grid1")
        {
            Grid1 = Visibility.Visible;
            Grid2 = Visibility.Collapsed;
            Grid3 = Visibility.Collapsed;
            ...
            Grid50 = Visibility.Collapsed;
        }
        else if(gridName == "grid2")
        {
            Grid1 = Visibility.Collapsed;
            Grid2 = Visibility.Visible;
            Grid3 = Visibility.Collapsed;
            ...
            Grid50 = Visibility.Collapsed;
        }
        ...
      }

这样做的更好方法是什么?这是我应该使用反射吗?

1 个答案:

答案 0 :(得分:0)

您可以使用转换器将选定的网格ID转换为可见性,如下所示:

public class GridIdToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        return value.ToString() == parameter.ToString() ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

并将其应用于您的网格

<Grid Visibility="{Binding SelectedGridId, Converter={StaticResource GridIdToVisibilityConverter}, ConverterParameter=grid1}/>