Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVVM模式中,多层是如何工作的?_C#_Wpf_Mvvm - Fatal编程技术网

C# 在MVVM模式中,多层是如何工作的?

C# 在MVVM模式中,多层是如何工作的?,c#,wpf,mvvm,C#,Wpf,Mvvm,我正试图了解MVVM。对于简单的列表->数据视图,这没有问题。但我很难理解多层是如何工作的。我有一些东西在工作,但对于哪些部分起作用,哪些部分不起作用,这是非常偶然的。例如,有些数据更新,有些则不更新。任何更深层次的内容都会影响更高层次的列表,有时会更新列表,有时则不会。一定有规律,但我还没有发现。是否有人知道任何教程不仅仅是列表->数据类型的视图 例如: List of widgets +- Widget name +- Widget description +- List of Widget

我正试图了解MVVM。对于简单的列表->数据视图,这没有问题。但我很难理解多层是如何工作的。我有一些东西在工作,但对于哪些部分起作用,哪些部分不起作用,这是非常偶然的。例如,有些数据更新,有些则不更新。任何更深层次的内容都会影响更高层次的列表,有时会更新列表,有时则不会。一定有规律,但我还没有发现。是否有人知道任何教程不仅仅是列表->数据类型的视图

例如:

List of widgets
+- Widget name
+- Widget description
+- List of Widget parts
   +- Part ID
   +- Colour

在这个例子中,我可以有一个三列的方法——左边的小部件列表,中间的小部件信息,包括部件列表,然后右边的部分细节。

你应该有多个ViewModels,每个级别都有一个。 然后,您可以提供事件,以便上级在发生更改时进行更新

例如,你可以有一个

public class WidgetListViewModel 
{
    public ObservableCollection<WidgetViewModel> Widgets {get; set; } 
}

public class WidgetViewModel
{
    public string WidgetName { get; set; }
    public string WidgetDescription { get; set; }
    public ObservableCollection<WidgetPartViewModel> Parts { get; set; }
}

public class WidgetPartViewModel
{
    public int PartId { get; set; }
    public System.Windows.Media.Color Color { get; set; }
}
公共类WidgetListViewModel
{
公共ObservableCollection小部件{get;set;}
}
公共类WidgetViewModel
{
公共字符串WidgetName{get;set;}
公共字符串WidgetDescription{get;set;}
公共可观察集合部分{get;set;}
}
公共类WidgetPartViewModel
{
公共int PartId{get;set;}
public System.Windows.Media.Color颜色{get;set;}
}
这里描述了具有事件(包括简单模式)

此外,我建议观看关于MVVM的精彩视频教程:

该视频还涵盖了一些团结问题!(这对你来说可能非常有价值)

他开发的源代码也可从以下网站获得:

您应该有多个ViewModels,每个级别一个。 然后,您可以提供事件,以便上级在发生更改时进行更新

例如,你可以有一个

public class WidgetListViewModel 
{
    public ObservableCollection<WidgetViewModel> Widgets {get; set; } 
}

public class WidgetViewModel
{
    public string WidgetName { get; set; }
    public string WidgetDescription { get; set; }
    public ObservableCollection<WidgetPartViewModel> Parts { get; set; }
}

public class WidgetPartViewModel
{
    public int PartId { get; set; }
    public System.Windows.Media.Color Color { get; set; }
}
公共类WidgetListViewModel
{
公共ObservableCollection小部件{get;set;}
}
公共类WidgetViewModel
{
公共字符串WidgetName{get;set;}
公共字符串WidgetDescription{get;set;}
公共可观察集合部分{get;set;}
}
公共类WidgetPartViewModel
{
公共int PartId{get;set;}
public System.Windows.Media.Color颜色{get;set;}
}
这里描述了具有事件(包括简单模式)

此外,我建议观看关于MVVM的精彩视频教程:

该视频还涵盖了一些团结问题!(这对你来说可能非常有价值)

他开发的源代码也可从以下网站获得:

这还不够,这里也不提供书籍/教程等建议或链接请求。您是否使用了Prism、Caliburn Micro等框架?这不是对您问题的直接回答,但更多的是旁注,您可能需要了解“事件聚合”模式。这是MVVM应用程序中断开连接的部分相互通信的一种好方法。m-y-我不是,但可能这正是我需要关注的。CG-我来看看。谢谢,你们两个-它给了我一些我应该看的东西。@GeoffM:看看这个StackOverflow问题()来决定使用哪个框架。。。总体而言,它们都很好,一些提供了更窄范围的功能,而另一些则更广泛。我个人选择学习Prism是因为在我看来,它是模块化/组件设计的理想选择。不过,我要警告你,Prism的学习曲线非常陡峭。这还不够,而且这个地方不适合书籍/教程/等建议或链接请求。你是否使用Prism、Caliburn Micro等框架?这不是对你问题的直接回答,但更多的是一个旁注,你可能想看看“事件聚合”模式。这是MVVM应用程序中断开连接的部分相互通信的一种好方法。m-y-我不是,但可能这正是我需要关注的。CG-我来看看。谢谢,你们两个-它给了我一些我应该看的东西。@GeoffM:看看这个StackOverflow问题()来决定使用哪个框架。。。总体而言,它们都很好,一些提供了更窄范围的功能,而另一些则更广泛。我个人选择学习Prism是因为在我看来,它是模块化/组件设计的理想选择。不过我要警告你,Prism的学习曲线非常陡峭。多视图模型的问题一直困扰着我的大脑。是时候多读多看了!谢谢。多视图模型的问题一直困扰着我。是时候多读多看了!谢谢