如何通过窗口的xaml将参数传递给usercontrol的viewmodel?

时间:2014-02-10 18:23:42

标签: c# .net wpf mvvm prism

如何通过窗口的xaml将参数传递给usercontrol的viewmodel?我正在使用MVVM模式。 我尝试过创建一个依赖属性,如下所示。但是在viewmodel的constructoe中传递它会抛出“非静态属性不能是字段初始化器”异常。 usercontrol的xaml.cs

public partial class SomeView : UserControl
{   
    SomeViewModel vm = new SomeViewModel(ForeColor);

    public SomeView()
    {
        InitializeComponent();
        this.DataContext = vm;
    }

    public Color ForeColor
    {
        get { return (Color)this.GetValue(ForeColorProperty); }
        set { this.SetValue(ForeColorProperty, value); }
    }

    public static readonly DependencyProperty ForeColorProperty = DependencyProperty.Register("ForeColor", typeof(Color), typeof(SomeView ));
}

这就是我调用用户控件的方式

 <local:SomeView ForeColor="{Binding Foreground}"/>

Foreground是System.Drawing.Color

类型的属性

2 个答案:

答案 0 :(得分:0)

如错误所述,您无法引用字段初始值设定项的实例字段

将初始化逻辑移到构造函数中:

SomeViewModel vm;

public SomeView()
{
    InitializeComponent();
    vm = new SomeViewModel(ForeColor);
    this.DataContext = vm;
}

答案 1 :(得分:0)

我建议你始终尽可能简化View的代码,使这个方式更加清晰,并牢记 MVVM 模式概念。

根据我的理解,您可能希望将查看上已更改的属性更新为 ViewModel 。否则,您只需在 ViewModel 中定义属性,而无需将其从视图传递。

因此,无论如何,在 ViewModel 上定义属性,您可以通过将绑定模式指定为“ OneWayToSource 来更新其值“或” TwoWay “。对于传递参数的View后面的代码,不需要Property实例化。使用DataContext进行绑定可以完成工作。此外,要使这些绑定模式起作用,您可以在Binding块上设置 UpdateSourceTrigger 属性。

您可以在以下 MSDN 网站上找到更多信息:

我希望这有助于你,问候。