C# Caliburn Micro-从模型类的ItemSource绑定自动创建ViewModel对象?

C# Caliburn Micro-从模型类的ItemSource绑定自动创建ViewModel对象?,c#,silverlight,xaml,mvvm,caliburn.micro,C#,Silverlight,Xaml,Mvvm,Caliburn.micro,在Caliburn Micro中,绑定到模型对象集合时,是否可以在视图和模型之间插入ViewModel对象 例如,如果我有一个具有以下属性的IShellViewModel: IEnumerable<Foo> Foos { get; set; } IEnumerable Foos{get;set;} 以及ShellView.xaml中的列表框 <ListBox x:Name="Foos"/> 它将使用FooView呈现listbox项。Caliburn能否为视图注

在Caliburn Micro中,绑定到模型对象集合时,是否可以在视图和模型之间插入ViewModel对象

例如,如果我有一个具有以下属性的
IShellViewModel

IEnumerable<Foo> Foos { get; set; }
IEnumerable Foos{get;set;}
以及ShellView.xaml中的列表框

<ListBox x:Name="Foos"/>


它将使用FooView呈现listbox项。Caliburn能否为视图注入要绑定到的IEnumerable集合?或者我必须在原始模型的IEnumerable旁边创建一个平行的IEnumerable集合。

我不太清楚你在问什么,当你说“哪个将使用FooView来呈现列表框项目”时,你是说你有一个视图来呈现所有项目,还是每个项目都有一个视图

如果是后者,则Caliburn.Micro有一个约定,即如果将一组视图模型(例如
IEnumerable
)绑定到
ItemsControl
,则它将为每个项目搜索
FooView
,并自动将定位的视图绑定到该项目的视图模型


如果您问Caliburn.Micro是否可以从您的模型类型自动生成ViewModel类型,那么答案是否定的。它如何知道要公开哪些属性?通常情况下,视图模型会重塑和增强模型的功能,包括特定于特定UI技术的表示逻辑。

我不太清楚你在问什么,当你说“哪个视图将使用FooView呈现列表框项”时,你是说你有一个视图呈现所有项,还是每个项目的视图

如果是后者,则Caliburn.Micro有一个约定,即如果将一组视图模型(例如
IEnumerable
)绑定到
ItemsControl
,则它将为每个项目搜索
FooView
,并自动将定位的视图绑定到该项目的视图模型


如果您问Caliburn.Micro是否可以从您的模型类型自动生成ViewModel类型,那么答案是否定的。它如何知道要公开哪些属性?通常,视图模型会重塑和增强模型的功能,包括特定于特定UI技术的表示逻辑。

是的,后者。FooViewModel的集合工作正常。我的问题是,如果你有一个IEnumerable的动态集合,Caliburn会为你做什么。Caliburn会创建适当的FooViewModel对象来桥接到模型对象吗?如答案的最后一部分所述,这实际上是不可能的,而且无论如何都是不可取的。为什么要使用此功能?以避免需要创建ViewModels的跟踪集合。否则,对于模型中的每个动态集合,我需要创建视图模型对象的并行集合(使用INCC跟踪原始模型集合)。这没什么大不了的,但是如果Caliburn创建ViewModel对象来按需包装模型对象会更好。这会很有用,我们自己也曾想到过类似的东西,使用泛型以及模型和视图模型类型作为泛型参数,但这只不过是最初的讨论。正如我所说,我认为您不希望自动生成视图模型类型,但您当然可以编写样板代码,以通用方式管理集合。好的,我已经使用通用参数编写了通用视图模型跟踪集合。这样行。但我更喜欢Caliburn使用一个模型,在这个模型中,ViewModel可以循环使用,并在需要时附加到模型对象。这与Silverlight/WPF在数据绑定中与元素虚拟化的工作方式非常相似。FooViewModel的集合工作正常。我的问题是,如果你有一个IEnumerable的动态集合,Caliburn会为你做什么。Caliburn会创建适当的FooViewModel对象来桥接到模型对象吗?如答案的最后一部分所述,这实际上是不可能的,而且无论如何都是不可取的。为什么要使用此功能?以避免需要创建ViewModels的跟踪集合。否则,对于模型中的每个动态集合,我需要创建视图模型对象的并行集合(使用INCC跟踪原始模型集合)。这没什么大不了的,但是如果Caliburn创建ViewModel对象来按需包装模型对象会更好。这会很有用,我们自己也曾想到过类似的东西,使用泛型以及模型和视图模型类型作为泛型参数,但这只不过是最初的讨论。正如我所说,我认为您不希望自动生成视图模型类型,但您当然可以编写样板代码,以通用方式管理集合。好的,我已经使用通用参数编写了通用视图模型跟踪集合。这样行。但我更喜欢Caliburn使用一个模型,在这个模型中,ViewModel可以循环使用,并在需要时附加到模型对象。这与Silverlight/WPF在数据绑定中使用元素虚拟化的方式非常相似。