我正在使用MVVM(MVVM Light)开发一个wpf应用程序。我的观点是有一个属性标记,它在构造函数中传递给我的viewmodel。
DataContext = new ChartNewViewModel(Token);
我想使用markup从xaml设置我的数据上下文。对于所有那些具有默认无参数构造函数的viewmodel,我使用了这个
<Window.DataContext>
<viewModel:ChartNewViewModel></viewModel:ChartNewViewModel>
</Window.DataContext>
我不知道如何使用xaml在viewmodel的构造函数中传递参数。
答案 0 :(得分:4)
XAML 2006通过初始化文本对非默认初始化的支持有限。但是ObjectDataProvider
可用于解决方法
你去吧
<Window.DataContext>
<ObjectDataProvider ObjectType="viewModel:ChartNewViewModel">
<ObjectDataProvider.ConstructorParameters>
<model:Token />
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
</Window.DataContext>
如果您使用的是XAML 2009,则可以使用x:Arguments
指令
例如
<Window.DataContext>
<viewModel:ChartNewViewModel>
<x:Arguments>
<model:Token />
</x:Arguments>
</viewModel:ChartNewViewModel>
</Window.DataContext>
x:Arguments
仅限XAML 2009的功能。
更多关于x:Arguments
答案 1 :(得分:1)
在这种情况下,您可以使用MVVM Light Toolkit的Messenger类。我假设您的令牌类型是字符串。
发送您的参数:
Messenger.Default.Send(Token);
在ChartNewViewModel.cs
中Messenger.Default.Register<string>(this, GetToken);
private void GetToken(string token)
{
this.Token = token;
}