【发布时间】:2021-01-09 17:44:01
【问题描述】:
我知道 MVVM 背后的想法是将 View 与 Viewmodel 分开,而 View 中的代码隐藏是不好的东西。
这就是我在不遵循 MVVM (xaml.cs) 时生成特定列数的方式。
for (int i = 0; i < Constants.GRID_COLUMN_NUMBER; i++)
{
ColumnDefinition tempColumn = new ColumnDefinition();
gridName.ColumnDefinitions.Add(tempColumn);
}
既然从 ViewModel 访问网格以生成行/列是一件坏事,那么实现此目的最有效的方法是什么?
使用带有代码隐藏的用户控件是一种可接受的解决方案吗?
【问题讨论】:
-
“视图中的代码隐藏是一件坏事” - ???。如果您说您理解这一点,请解释一下为什么会这样?
-
“将视图与视图模型分开”可以,但是“视图中的代码隐藏是一件坏事”是一个很大的误解。 MVVM 对后者只字未提。
-
MVVM 上下文中的代码绝对没有问题,只要它用于使视图工作。与 MVVM 背道而驰的是与业务逻辑或其他数据相关功能相关的代码。
-
我在 uni 被教导,如果我要遵循 MVVM,我应该在 View code-behind 中没有代码。从你的语气来看,我只能假设允许存在 View 中的代码。我确实知道并非所有代码都可以从 View 中豁免,但我不确定我需要的是什么。
-
为研磨生成列应该在视图中,因为它显然与用户的外观有关。所以你在这里很好。请记住,视图、视图模型和模型都是用户界面层的一部分。核心逻辑甚至在这背后。在模型部分中,您基本上构建了数据,视图模型包含用户与数据交互的逻辑。视图就是它的样子,因此它与 xaml 相关(如果您使用 WPF)。