【发布时间】: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 的相同/不同之处,没有人能真正回答这个问题。