c# - 在哪里将 ViewModel 绑定(bind)到 View?

标签 c# windows-phone-7 mvvm viewmodel

我在 Windows Phone 7.5 及更高版本上处理一个项目(6 页)目标。我不做纯 MVVM 模型,因为处理导航事件和查询字符串是如此痛苦,所以我决定一个一个地学习它,然后先完成项目:P

由于我是 MVVM 的新手,我决定不使用 MVVM Light,自己编写所有样板代码。
当我完成每个部分的编码时,我面临一个问题。

在哪里绑定(bind) View 模型是最有效的。我阅读了很多并总结了以下几点。

  • 在 App.xaml.cs 中创建模型实例作为属性,并在 View 的代码隐藏中进行绑定(bind)。(这是官方数据绑定(bind)应用程序示例的方式。)但是当面对大量 View 时(6 页等),这可能是个问题。
    public partial class App : Application
    {
        private static MainViewModel viewModel = null;
    
        /// <summary>
        /// A static ViewModel used by the views to bind against.
        /// </summary>
        /// <returns>The MainViewModel object.</returns>
        public static MainViewModel ViewModel
        {
            get
            {
                // Delay creation of the view model until necessary
                if (viewModel == null)
                    viewModel = new MainViewModel();
    
                return viewModel;
            }
        }
    }
    
  • 在 View 后面的代码中创建一个新的 View 模型实例作为全局变量。所以我可以在整个 View 中使用它。 (如上,我不做纯MVVM)
  • 在后面的代码中,在构造函数中,绑定(bind)一次。
    public MainPage()
    {
        InitializeComponent();
    
        myViewModel vm = new myViewModel();
        DataContext = vm;
    }
    

  • 我阅读了使用 ViewModelLocator 作为中心站的 mvvm light。但是避免使用mvvm light,你们认为在哪里绑定(bind)viewmodel最好呢?

    最佳答案

    MVVM 只是一种模式,不使用纯 mvvm 也可以。就个人而言(最终这一切都取决于您的偏好)我认为选项 3 是理想的。

    由于 View 优先的方法,在 windows phone 中尤其如此。我也不喜欢将我的应用程序代码与 View 模型混杂在一起的想法。我认为后面的 View 代码是设置和绑定(bind) View 模型的更自然的位置。一般来说, View 模型应该是 View 的一个实例。例如,我不想让不同项目的详细信息页面共享一个详细信息 View 模型,显然它们会显示相同的数据。虽然 View 模型可以被不止一种类型的 View 使用,但它通常不会用于多个 View 实例。

    我可以看到将其放入应用程序代码的唯一好处是您可以从任何地方访问您的 View 模型实例。虚拟机“a”需要告诉虚拟机“b”刷新。这在像这样的移动平台中并不常见,尽管我在拖放场景或子窗口中更需要它。好消息是,如果您确实需要该功能,您仍然不需要制作静态 View 模型,您可以自己实现或只从 mvvmlight 中提取消息库。

    我现在在 wp 市场上有 4 个应用程序,我已经在后面的代码中试验了 View 模型,正如我为你和 MVVM light 和 caliburn micro 所建议的那样。希望这可以帮助。

    关于c# - 在哪里将 ViewModel 绑定(bind)到 View?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544297/

    相关文章:

    wpf - 如何在用户控件 View 模型中处理来自主窗口的命令

    c# - 通过 ASP.NET MVC Action Filter 修改表单值

    xaml - 设置 CustomMessageBox 的 DataContext

    使用全局声明存储的 ExtJS5 ViewModel

    c# - 取消异步网络请求?

    c# - Listpicker 无法进入全屏模式 Windows Phone

    xaml - 银光 : Not naming controls in XAML when using MVVM (Silverlight)?

    c# - 验证输入字符串是有效的十进制数

    c# - 如何使用 XAML、WP 8.1 中的 DataTrigger 行为切换两个按钮的可见性?

    c# - 访问表单例份验证票