gpt4 book ai didi

c# - 缺乏初始化 View 模型的知识

转载 作者:行者123 更新时间:2023-12-03 10:23:23 25 4
gpt4 key购买 nike

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

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

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

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

它意味着进入两个不同的页面以传递 TextBoxes 之间的值.
我也很困惑是否应该把 ViewModel在主窗口和页面中,或仅在两者之一中。

那么,有人可以帮忙吗?

最佳答案

遵循这个模式:

这部分是您的模型类的外观,
即使您使用 Entity Framework 来创建您的模型,它们也会继承 INPC.. 所以一切都很好。

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

每个 View 模型都是要查看的信息的子集,因此您可以为同一个模型类拥有多个 View 模型,请注意,如果您调用无参数 c-tor,您将获得模拟模型的自动实例在 View 模型中使用。
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 设计器中查看,您将有一个模拟 View 模型来显示。
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>

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

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

关于c# - 缺乏初始化 View 模型的知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19620795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com