3

据我了解,当我将 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 构造函数的一个参数。

所以,我的视图(主窗口)是

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

我的视图模型是

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

编辑

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

4

2 回答 2

2

还是我们觉得有更好的方法?

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

将您的视图的数据上下文设置为您的视图模型:

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

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

 private YourModel _yourModel;

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

So, now your view-model is bound to your view. All model interaction should be coordinated throught the view-model.

于 2013-01-28T15:31:25.060 回答
1

不要忘记添加InitializeComponent()您的MainWindow构造函数。

public MainWindow(MyObject myObject)
{
    InitializeComponent();
}
于 2013-01-28T14:48:52.293 回答