gpt4 book ai didi

c# - 尝试通过微软示例理解 MVVM

转载 作者:行者123 更新时间:2023-11-30 19:55:40 25 4
gpt4 key购买 nike

看这个例子:https://msdn.microsoft.com/en-us/library/windows/apps/gg521153%28v=vs.105%29.aspx?f=255&MSPPError=-2147217396

看起来 ViewModel 包含一组设置为 View 的数据上下文的模型。

在 MVVM 中,ViewModel 不应该是 View 的数据上下文,模型将在其中修改 ViewModel,然后影响 View 吗?

最佳答案

TL; DR - 该示例根本不是 MVVM。

是的,这是 MVVM 的一个糟糕的例子。 View 在运行时绑定(bind)到查询“viewmodel”中的属性的 LINQ 结果,而不是绑定(bind)到 viewmodel 本身。 Accomplishments没有在其他任何地方使用。

换句话说,在 OP 指向的示例中, View 根本没有绑定(bind)到 View 模型,而是错误地直接绑定(bind)到模型集合。 我不相信 ObservableCollection<>构成合理的ViewModel。 (或 IEnumerable<> ; IList<> 或类似的)

这是 View 代码隐藏中的违规行:

LevelViewOnPage.DataContext = from Accomplishment in vm.Accomplishments 
where Accomplishment.Type == "Level"
select Accomplishment;

通常你会绑定(bind) View 的 DataContext到 View 模型。

其他问题

在代码审查方面,一些奇怪的设计和命名约定实际上非常糟糕。

View 通过以下方式调用 View 模型:

vm.GetAccomplishments();

...因为它是一个 void 而没有“得到”任何东西.该方法填充Accomplishments如果你弄错了顺序,你无论如何都必须阅读的属性太糟糕了。

关于c# - 尝试通过微软示例理解 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36348050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com