Xaml WPF通过构造函数设置DataContext
据我所知,当我将ViewModel绑定到视图时,它是通过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
<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();
}