【问题标题】:controlling multiple grids visibility控制多个网格的可见性
【发布时间】:2016-10-19 09:05:12
【问题描述】:

我有一个 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;
        }
        ...
      }

有什么更好的方法来做到这一点?这是我应该使用反射的地方吗?

【问题讨论】:

  • 此时我会问自己是否可以简化我的观点。实际上我会在第 5 格之后问它,而不是第 50 格。这取决于你,当然,有一个方法find WPF control by Name
  • 将可见性绑定到 viewModel 中的字符串,并使用转换器找出应该可见的网格
  • @ASh 我能问一下你会用什么来代替网格吗?
  • @mHelpMe,这取决于网格显示的内容以及需要什么样的功能。
  • 网格有何不同?我个人的偏好是拥有一个网格并根据需要交换其内容,而不是在视觉树中制作一大堆隐藏的对象。或者交换一个绑定到其数据上下文的对象,让该对象控制渲染。如果不知道网格 42 与网格 18 的相同/不同之处,没有人能真正回答这个问题。

标签: c# .net wpf mvvm


【解决方案1】:

您可以使用转换器将选定的网格 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}/>

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 2019-02-08
    • 2013-06-14
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多