据我所知,当我将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?或者我们觉得有更好的方法吗?
修改
解释我想要实现的目标可能有所帮助。我的程序执行一些任务并创建日志。日志存储在内存中。在我的程序进程结束时,日志显示在屏幕上。这就是我将对象传递给构造函数的原因。
答案 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();
}