0

我有一个View

internal partial class StartWindow : Window
{
    public StartWindow()
    {
        InitializeComponent();
    }

    [ImportingConstructor]
    public StartWindow(IStartWindowViewModel viewModel)
        :this()
    {
        ViewModel = viewModel;
    }

    public IStartWindowViewModel ViewModel { get; private set; }
}

和一个适当的ViewModel

    [Export]
    internal class StartWindowViewModel : IStartWindowViewModel
    {
        public IEnumerable<Customer> Customers { get; set; }
    }

UPD(基于@Blachshma 回答):我无法使用代码将 StartWindow 视图注入我的应用程序:

public class App
{
     [ImportingConstructor]
     public App(StartWindow window)
     {
          // Do whatever you need
     }

因为 App.g.cs 需要无参数构造函数:

internal partial class App : System.Windows.Application {

        /// <summary>
        /// Application Entry Point.
        /// </summary>
        [System.STAThreadAttribute()]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
        public static void Main() {
            TransparentNotification.App app = new TransparentNotification.App();
            app.Run();
        }
    }

现在,我想在app.cs我的viewvia中实例化constructor injection。我该怎么做?

此外,我的m looking for best practices forMEF /MVVM 解决方案(一些示例代码将是一个好主意)。

ps .NET 4.5

4

1 回答 1

0

如果要使用 MEF 获取视图的实例,首先需要导出视图。因此,将[Export]属性添加到您的 StartWindow 类:

[Export]
partial class StartWindow : Window
{
  ...

现在,在你的App类中使用 ImportingConstrutor 来获取实例:

public class App
{
     [ImportingConstructor]
     public App(StartWindow window)
     {
          // Do whatever you need
     }

关于 MVVM 的好文章,我推荐Josh Smith 的博客

于 2013-01-31T21:18:45.443 回答