缺乏初始化视图模型的知识
本文关键字:知识 模型 视图 初始化 | 更新日期: 2023-09-27 18:37:05
好的。所以我需要做的是使用构造函数初始化ViewModel
。问题是由于缺乏知识,我无法创建构造函数。我是MVVM
(或一般的 c#)的新手,必须获得一些帮助才能实现此代码:
public class ViewModel
{
private static ViewModel instance = new ViewModel();
public static ViewModel Instance
{
get
{
return instance;
}
}
}
但是,我无法创建一个构造函数来放置此代码。
DataContext = ViewModel.Instance
它意味着进入两个不同的页面以在TextBoxes
之间传递值。我也对是否应该将ViewModel
放在主窗口和页面中或仅放在两者之一中感到困惑。
那么,任何人都可以提供帮助吗?
遵循以下模式:
这部分是模型类应该是什么样子,即使您使用实体框架来创建模型,它们也会继承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.. 的完整模式。 在完整模式中,您可以通过视图模型公开与模型中的方法相关的命令,并且也可以绑定到您的视图。祝你好运:)
我基本上遵循这个模式:
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;
如果您或其他任何刚接触 MVVM 的人被卡在这里,例如"找不到 INotifyPropertyChanged"。我建议尝试一些示例 - MVVM 或教程。
一些我觉得有用的:
- http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial
- https://www.youtube.com/watch?v=EpGvqVtSYjs&index=1&list=PL356CA0B2C8E7548D