【问题标题】:Which executes first Code Behind or View Model哪个执行第一个后面的代码或查看模型
【发布时间】:2013-04-18 02:40:19
【问题描述】:

基于我之前的问题Accessing variables from XAML and object from ViewModel using Code Behind: 我怎么知道哪个先执行?

是背后的代码还是 ViewModel?
我只是想确保我的代码在 ViewModel 之前执行

【问题讨论】:

  • 我相信您的问题超出了具体的上下文(具体的应用程序设计),即使在研究了您的上一个问题之后,我仍然怀疑您在问什么 - 可以通过代码隐藏完全替代 XAML,反之亦然反之亦然。如果您在 XAML 中执行某些操作,那么您不会在代码隐藏中执行此操作,反之亦然。无论如何,看看这个问题最终将如何回答很有趣
  • 嗨@ГеннадийВанинНовосибирск 你看到我上面的问题的相关主题了吗?我正在访问视图模型以使用后面的代码将项目添加到我现有的列表中。但我想确保在我的视图模型中执行任何操作之前发生这种情况。请参考以下链接了解更多详情stackoverflow.com/questions/16007054/…
  • 这个问题真的没有多大意义。在编译器完成源代码后,您最终会得到一个 SINGLE 类。代码由 XAML 生成,这就是 .xaml.cs 类通常在其定义中包含 partial class 的原因。您可能指的是 XAML 上的绑定何时初始化,当然是在 InitializeComponent(); 期间

标签: c# wpf xaml mvvm conceptual


【解决方案1】:

View 和 ViewModel 都是被实例化的常规类。这是通过像在任何其他类中一样调用构造函数来完成的。因此,作为对您问题的简单回答:在每个构造函数中设置一个断点,然后查看首先命中哪个。

您的问题没有通用答案,因为这取决于您的架构和用例。通常,某些控件绑定到其父视图模型的属性,该属性会在某些时候发生变化。那时,您的 View 已经存在,并且您不知道该属性设置的值已经存在多长时间。在其他情况下,您的 View 是为特定的 ViewModel 创建的,并将其作为构造函数参数。

确保 ViewModel 在 View 之前存在的一种方法是将 ViewModel 作为构造函数参数传递。构造函数参数背后的想法是表达:“此类需要创建 xy 类型的现有实例”,这就是您所要求的。但是,由于您将在构造函数中将其设置为 Views DataContext 并且 DataContext 在创建 View 后可以更改,因此您不能确定 View 在创建后不会获得分配的新 ViewModel。更糟糕的是,您将无法再在 XAML 中使用您的控件,因为它不再具有默认构造函数。

根据您的第一个问题,尚不清楚为什么 ViewModel 应该在 View 之前存在。如果您需要从 View 中读取资源值并将其分配给 ViewModel 上的属性,我希望它会反过来吗?或者您是否正在访问 ViewModel 中的视图(不要!)?

问题是,为什么你首先要问这个问题。您(或您的老板......)的概念有一些非常错误的地方:View 和 ViewModel 是两个实体,它们应该在不知道彼此的情况下真正工作。这个想法是构建可以在没有单个视图的情况下完美运行的应用程序,只需获取/设置 ViewModels 上的值,并拥有可以在没有 ViewModels 的情况下完美编译任何运行的视图,只是没有任何东西可显示或做......如果你尝试要破解这种方法,最好不要使用 MVVM。

【讨论】:

  • 是的,我为这个问题道歉。也许他们(我的老板)认为因为我只是一个新手,所以他们可以要求我做任何不合适的事情。我的老板告诉我,总是有例外。但无论如何,谢谢你的解释。我得到了它。我实际上开始学习编程,这就是为什么我的知识非常有限。但再次感谢您。
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多