【问题标题】:Difference between datacontext and normal object creation in C#C#中数据上下文和普通对象创建之间的区别
【发布时间】:2013-07-01 06:22:37
【问题描述】:

我看过一个视频,在不同的窗口,演示者遵循不同的风格。

例如:

在一个窗口中,他使用如下:

EmployeeViewModel evm = (EmployeeViewModel)this.DataContext;
evm.Display();

在另一种情况下,他使用如下:

EmployeeViewModel evm = new EmployeeViewModel();
evm.Display();

在技术上和最好的使用方式上有什么区别?请帮助我了解其中的区别。

【问题讨论】:

  • 有人投反对票 :0 我不知道这两种风格背后的含义有什么区别 :(
  • 这可能不是一个很好的视频,因为命名很差。我建议您阅读有关MVVM 模式的更多信息,因为使用DataContextMVVM 的重要组成部分。
  • @Silvermind:嗨,抱歉,视频可能不错,我真的学到了一些东西。它来自 MS 的 Silverlight 人之一,看起来像。无论如何,概念是这里的主要关注点。好吧,我尝试过改变上面所说的风格,我认为它们都不是为了实现相同的目标。在某种程度上,我看到没有关系,但不完全理解。好吧,将浏览更多 C# 概念和 MVVM 视频和书籍,谢谢 Silvermind :) 我喜欢你的 ID 名称 :P :)

标签: c# .net silverlight c#-4.0 mvvm


【解决方案1】:

第一个代码片段检索当前显示的 ViewModel。 (它应该做一个空检查)

第二个代码片段创建了一个 ViewModel 的新实例。

因为不清楚 Display() 做了什么,所以很难解释两个片段的效果之间的区别,但可能是第二个片段是忽略视图的 ViewModel 的(单元)测试。

据我所知,没有最好的方法,因为两个片段的用途不同。

【讨论】:

  • 非常感谢 Erno,是的,两者都有不同的用途。第二个的意思,我很熟悉。但是,第一个虽然我在某些地方使用过,但我不太了解它的深入含义。好吧,将进一步研究以更好地理解它。再次感谢你:)
  • 对不起,我误传了。视频是这样说的:EmployeeViewModel evm = new EmployeeViewModel(); evm.GetEmployees(); myView.DataContext = evm;
  • 这会创建 ViewModel 的一个实例,将数据加载到 ViewModel 中,然后将其提供给 View 以显示。我认为对 GetEmployees() 的调用不是很干净。我会让 GetEmployees 返回员工,而不是加载员工。
  • 完美地说,谢谢 Erno,这就是我的 VS 中发生的事情,视频也解释了相同的内容。然而,第一个我对他使用相同名称的对象命名感到困惑。我认为,由于我上面帖子中一到二之间的对象名称相同,因此行为也应该相同。好吧,无论如何,我会尝试理解第一个。干杯:)
猜你喜欢
  • 1970-01-01
  • 2015-05-10
  • 2020-09-13
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
相关资源
最近更新 更多