嗨,我正在构建一个wpf应用程序,其中的屏幕将由用于执行各种应用程序的不同用户控件组成。

我想知道在MVVM中执行此操作的正确过程吗?每个用户控件应具有自己的 View 模型,还是仍应绑定(bind)到主要的 View 模型属性?

请提出一个好的方法。谢谢,

最佳答案

当我使用UserControl时,我通过DependencyProperties传递数据。我的UserControls没有ViewModels。 UserControls仅以非常特殊的方式处理传递的数据。

但是,如果我的 View 包含一些 subview ,则我希望每个 subview 都有一个自己的模型。我将通过MainView的ViewModel属性绑定(bind)这些模型。

一些例子:

UserControl1,代码背后:

public partial class UserControl1 : UserControl
{
    public MyClass MyProperty
    {
        get { return (MyClass)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }

    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(MyClass), typeof(UserControl1), new UIPropertyMetadata(null));


    public UserControl1()
    {
        InitializeComponent();
    }
}

 public class MyClass
{
    public int MyProperty { get; set; }
}

以及 View 中的用法,XAML:
<Window x:Class="Sandbox.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Sandbox="clr-namespace:Sandbox">
  <Grid>
    <Sandbox:UserControl1 MyProperty="{Binding MyOtherPropertyOfTypeMyClassInMyViewModel, Mode=TwoWay}" />
  </Grid>

希望这可以帮助

关于.net - 如何在WPF MVVM中使用用户控件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6841924/

10-10 17:31