使用参数化构造函数从标记设置视图的DataContext

时间:2014-07-09 12:03:03

标签: c# wpf mvvm

我正在使用MVVM(MVVM Light)开发一个wpf应用程序。我的观点是有一个属性标记,它在构造函数中传递给我的viewmodel。

DataContext = new ChartNewViewModel(Token);

我想使用markup从xaml设置我的数据上下文。对于所有那些具有默认无参数构造函数的viewmodel,我使用了这个

<Window.DataContext>
    <viewModel:ChartNewViewModel></viewModel:ChartNewViewModel>
</Window.DataContext>

我不知道如何使用xaml在viewmodel的构造函数中传递参数。

2 个答案:

答案 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;
 }