繁体   English   中英

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

[英]How to pass parameters to usercontrol's viewmodel through window's xaml?

如何通过窗口的xaml将参数传递给usercontrol的viewmodel? 我正在使用MVVM模式。 我尝试过如下创建依赖项属性。 但是将其传递给viewmodel的构造函数会引发“非静态属性不能是字段初始化器”的异常。 用户控件的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}"/>

前景是类型System.Drawing.Color的属性

如错误所述,您不能从字段初始化程序引用实例字段

而是将初始化逻辑移至构造函数:

SomeViewModel vm;

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

我建议您始终保持View的代码尽可能简单,使这种应用程序更简洁,并牢记MVVM模式概念。

根据我的理解,您希望将在View上更改的属性更新为其ViewModel 否则,您可以仅在ViewModel中定义属性,而无需从View传递它。

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

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

希望这对您有所帮助,Regards。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM