Xaml WPF通过构造函数设置DataContext

Xaml WPF通过构造函数设置DataContext,xaml,mvvm,binding,Xaml,Mvvm,Binding,据我所知,当我将ViewModel绑定到视图时,它是通过DataContext完成的。差不多 <Grid.Resources> <myData:MyVM x:Key="Vm" /> </Grid.Resources> <Grid.DataContext> <Binding Source="{StaticResource Vm}"></Binding> </G

据我所知,当我将ViewModel绑定到视图时,它是通过DataContext完成的。差不多

   <Grid.Resources>
        <myData:MyVM x:Key="Vm" />
    </Grid.Resources>
    <Grid.DataContext>
        <Binding Source="{StaticResource Vm}"></Binding>
    </Grid.DataContext>
我的模型是

 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中?还是我们觉得有更好的方法

编辑


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

别忘了在
主窗口中添加
InitializeComponent()

public MainWindow(MyObject myObject)
{
    InitializeComponent();
}
还是我们觉得有更好的方法

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

将视图的DATACONTEXT设置为视图模型:

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

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

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

在哪里使用视图模型?我不会在XAML或构造函数中使用它。如果您使用的是MVVM,那么视图实际上不应该创建ViewModels。相反,您的ParentViewModel应该创建子ViewModels,您的视图应该只是为ViewModel提供一个用户友好的界面。“Model”是由UI创建的吗?我的模型是我的主窗口构造函数上的一个参数。这违反了MVVMprinciples@HichemC啊。。。所以这是设计上的失误。知道这一点很好。您可能需要使用两种方法来查看MVVM:视图优先和模型视图优先。第二种是常见的和推荐的
 private YourModel _yourModel;

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