为了账号安全,请及时绑定邮箱和手机立即绑定

什么是ViewModelLocator?与DataTemplates相比,它的优缺点是什么?

什么是ViewModelLocator?与DataTemplates相比,它的优缺点是什么?

慕的地10843 2019-12-12 14:44:58
有人可以简要概述一下ViewModelLocator是什么,它如何工作以及与DataTemplates相比使用它的优点/缺点吗?我曾尝试在Google上查找信息,但似乎有许多不同的实现方式,而没有关于它的含义以及使用它的利弊的详尽列表。
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

我有一个视图模型定位器类。每个属性都将是我将在视图上分配的视图模型的实例。我可以检查代码是否在设计模式下运行或不使用DesignerProperties.GetIsInDesignMode。这使我可以在设计时使用模拟模型,并在运行应用程序时使用真实对象。


public class ViewModelLocator

{

    private DependencyObject dummy = new DependencyObject();


    public IMainViewModel MainViewModel

    {

        get

        {

            if (IsInDesignMode())

            {

                return new MockMainViewModel();

            }


            return MyIoC.Container.GetExportedValue<IMainViewModel>();

        }

    }


    // returns true if editing .xaml file in VS for example

    private bool IsInDesignMode()

    {

        return DesignerProperties.GetIsInDesignMode(dummy);

    }

}

要使用它,我可以将定位器添加到App.xaml资源中:


xmlns:core="clr-namespace:MyViewModelLocatorNamespace"


<Application.Resources>

    <core:ViewModelLocator x:Key="ViewModelLocator" />

</Application.Resources>

然后将您的视图(例如:MainView.xaml)连接到您的视图模型:


<Window ...

  DataContext="{Binding Path=MainViewModel, Source={StaticResource ViewModelLocator}}">


查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 1069 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信