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