1

好的。所以我需要做的是ViewModel使用构造函数初始化 a 。问题是由于缺乏知识,我无法创建构造函数。我是新手MVVM(或者一般来说是 c#),并且必须获得一些帮助才能实现此代码:

public class ViewModel
{
  private static ViewModel instance = new ViewModel();

  public static ViewModel Instance
  {
     get
     {
        return instance;
     }
  }
}

但是,我无法创建一个构造函数来放置此代码。

DataContext = ViewModel.Instance

它意味着进入两个不同的页面以在TextBoxes. 我也很困惑是否应该将其ViewModel放在主窗口和页面中,还是仅放在两者之一中。

那么,有人可以帮忙吗?

4

3 回答 3

3

遵循这个模式:

这部分是您的模型类应该是什么样子,即使您使用实体框架来创建您的模型,它们也会继承 INPC.. 所以一切都很好。

public class Model_A : INotifyPropertyChanged
{
   // list of properties...
   public string FirstName {get; set;}
   public string LastName {get; set;}
   // etc...
}

每个视图模型都是要查看的信息的子集,因此您可以为同一个模型类拥有多个视图模型,请注意,如果您调用无参数 c-tor,您将获得模拟模型的自动实例在视图模型中使用。

public class ViewModel_A1 : INotifyPropertyChanged
{
  public Model_A instance;

  public ViewModel()
  {
     instance = new instance
     { //your mock value for the properties..
       FirstName = "Offer",
       LastName = "Somthing"
     };
  }

  public ViewModel(Model_A instance)
  { 
    this.instance = instance;
  }
}

这是供您查看的,如果您在 ide 设计器中查看,您将有一个模拟视图模型来显示。

public class View_For_ViewModelA1
{
  public View_For_ViewModel_A1()
  {
     //this is the generated constructor already implemented by the ide, just add to it:
     DataContext = new ViewModel_A1();

  }

  public View_For_ViewModel_A1(ViewModel_A1 vm)
  {
    DataContext = vm;
  }
}

XAML 方面:

<Window x:Class="WpfApplication1.View_For_ViewModel_A1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:ViewModel="clr-namespace:WpfApplication1"
    mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
    d:DataContext="{d:DesignInstance ViewModel:ViewModel_A1, IsDesignTimeCreatable=True}"
    Title="Window1" Height="300" Width="300">
    <Grid>
       <TextBox Text="{Binding FirstName}" />
       <TextBox Text="{Binding LastName}" />
    </Grid>
</Window>

在更高级的场景中,您可能希望拥有一个与多个模型类相关的单个视图模型类。但您始终应该将视图设置为绑定到单个视图模型。如果您需要对代码进行功夫 - 请确保您在视图模型层中执行此操作。(即创建具有不同模型类型的多个实例的视图模型)

注意:这不是 mvvm 的完整模式。在完整模式中,您可以通过视图模型公开与模型中的方法相关的命令,并且也可以绑定到视图。祝你好运 :)

于 2013-10-27T17:28:13.107 回答
0

如果您或其他任何刚接触 MVVM 的人被困在这里,例如“找不到 INotifyPropertyChanged ”。我建议尝试一些示例 MVVM 或教程。

我发现一些有用的:

于 2014-05-27T14:56:09.083 回答
0

我基本上遵循这个模式:

    public class ViewModelWrappers
    {
        static MemberViewModel _memberViewModel;
        public static MemberViewModel MemberViewModel
        {
            get
            {
                if (_memberViewModel == null)
                    _memberViewModel = new MemberViewModel(Application.Current.Resources["UserName"].ToString());

                return _memberViewModel;
            }
        }
...
}

要将其绑定到页面是:

DataContext = ViewModelWrappers.MemberViewModel;

如果我在页面上使用超过 1 个 ViewModel,我只需绑定到包装器。

DataContext = ViewModelWrappers;
于 2013-10-27T17:13:40.573 回答