ViewModel构造函数,包含参​​数ins WPF

时间:2013-09-15 21:37:50

标签: wpf xaml data-binding mvvm user-controls

如果最后在构造函数中包含参数,我们如何将用户控件绑定到视图模型对象?

视图中使用“DataContext”的绑定是否确保在创建视图模型时自动创建视图?

1 个答案:

答案 0 :(得分:1)

如果您使用的是IoC容器,则支持开箱即用。

这实际上取决于您使用的IoC容器,但这是使用Prism Unity容器的示例。

以下示例取自Prism QuickStarts guide

因此,首先,我们必须设置统一容器:

public class QuickStartBootstrapper : UnityBootstrapper
{
   private readonly CallbackLogger callbackLogger = new CallbackLogger();

    /// <summary>
    /// Configures the <see cref="IUnityContainer"/>. 
    ///May be overwritten in a derived class to add specific
    /// type mappings required by the application.
    /// </summary>
    protected override void ConfigureContainer()
    {
        // Here you can do custom registeration of specific types and instances
        // For example
        this.Container.RegisterInstance<CallbackLogger>(this.callbackLogger);

        base.ConfigureContainer();
    }
}

从某种程度上说,你做完了! 您现在要做的就是让您的视图在其构造函数中接收viewModel作为参数,如下所示:

public partial class OverviewView
{
    public OverviewView(OverviewViewModel viewModel)
    {
        InitializeComponent();
        this.DataContext = viewModel;
    }
}

Unity IoC容器将在ViewModel中处理您的参数,即使您不必在大多数时间都注册这些类型。

请注意,在我的回答中,我只提到配置的IoC部分。设置整个MVVM应用程序需要更多的工作,并且根据您使用的MVVM框架而有所不同