WPF通过构造函数设置DataContext

时间:2013-01-28 14:46:52

标签: xaml mvvm binding

据我所知,当我将ViewModel绑定到View时,它是通过DataContext完成的。像

这样的东西
   <Grid.Resources>
        <myData:MyVM x:Key="Vm" />
    </Grid.Resources>
    <Grid.DataContext>
        <Binding Source="{StaticResource Vm}"></Binding>
    </Grid.DataContext>

我对如何填充ViewModel的理解是View调用ViewModel(通过绑定),ViewModel与Model进行对话并完成将自身(ViewModel)置于所需状态所需的操作。

那么,如果您的“模型”是由UI创建的,会发生什么?我的模型是我的MainWindow构造函数的参数。

所以,我的View(MainWindow)是

public MainWindow(MyObject myObject)
    {
          InitializeComponent();
    }

我的ViewModel是

 public class ViewModel 
{
    #region properties

    private MyObject myList;
    public MyObject MyList
    {
        get; set ;
    }

    #region Constructors

    public ViewModel ()
    {

    }

    public ViewModel (MyObject myObject)
    {
        this.myObject= myObject;
    }        
}

现在,当我的应用程序运行时,(我确定我在这里使用了错误的单词)如何将我的参数“注入”ViewModel?或者我们觉得有更好的方法吗?

修改

解释我想要实现的目标可能有所帮助。我的程序执行一些任务并创建日志。日志存储在内存中。在我的程序进程结束时,日志显示在屏幕上。这就是我将对象传递给构造函数的原因。

2 个答案:

答案 0 :(得分:2)

  

或者我们觉得有更好的方法吗?

我宁愿看到你将你的视图绑定到你的视图模型。如果您要遵循MVVM模式,那么这是一种方法。现在,我不能确定你是否使用了依赖注入,但你在提问中提到“注入”,所以我假设你是。这是一个代码示例:

将您视图的数据显示在您的视图模型中:

 public YourView(IUnityContainer container)
        {
            InitializeComponent();
            this.DataContext = container.Resolve<IYourViewModel>();
        }

将您的模型注入您的视图模型:

 private YourModel _yourModel;

 public YourViewModel(YourModel yourModel)        
        {
            _yourModel = yourModel;
            InitializeDelegateCommands();
        }

因此,现在您的视图模型已绑定到您的视图。所有模型交互都应该通过视图模型进行协调。

答案 1 :(得分:1)

不要忘记在InitializeComponent()构造函数中添加MainWindow

public MainWindow(MyObject myObject)
{
    InitializeComponent();
}