如何通过窗口的 xaml 将参数传递给用户控件的视图模型?



如何通过窗口的xaml将参数传递给用户控件的视图模型?我正在使用MVVM模式。我尝试创建一个依赖属性,如下所示。但在视图模型的构造中传递它会引发"非静态属性不能是字段初始化器"异常。用户控制的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 类型的属性

正如错误所述,您不能引用字段初始化器中的实例字段。

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

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

我建议您始终保持View的代码尽可能简单,使其成为一个更干净的应用程序,并牢记MVVM模式概念。

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

因此,在ViewModel上定义属性时,您可以通过将绑定模式指定为">OneWayToSource"或">TwoWay"来更新其值。视图的代码后面不需要任何属性实例化来传递参数。绑定及其DataContext可以完成这项工作。此外,为了使这些绑定模式发挥作用,您可以在binding块上设置UpdateSourceTrigger属性。

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

  • Binding.Mode属性
  • Binding.UpdateSourceTrigger属性

我希望这对你有所帮助,问候。

最新更新