我有一个简单的例子,我正在创建一个包含列表框的视图,列表框显示一堆项目。我想知道我是否正确地在这里创建View Model和Model类。使用在这种情况下正确工作的任何值,我理解它有点主观,但我目前的解决方案感觉不对。这是一个简化版本。
ViewModels和Models:
namespace Example
{
public class ParentViewModel
{
public ParentViewModel()
{
// ... Create/Consume ChildViewModel * n
}
public List<ChildViewModel> ChildViewModels { get; set; }
}
public class ChildViewModel
{
public ChildViewModel()
{
// ... Create/Consume ChildModel
}
public ChildModel Model { get; set; }
}
public class ParentModel
{
public List<ChildModel> ChildModels { get; set; }
public ParentModel()
{
// ... Create/Consume ChildModel * n;
}
}
public class ChildModel
{
public ChildModel()
{
// ... Contains actual data.
}
public string Data { get; set; }
}
}
观点:
<Window x:Class="Example.View"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Example="clr-namespace:Example" Title="View" Height="300" Width="300"
DataContext="{StaticResource TheViewModel}">
<Window.Resources>
<Example:ParentViewModel x:Key="TheViewModel" />
</Window.Resources>
<Grid>
<ListBox Height="261" HorizontalAlignment="Left" Name="listBox1" VerticalAlignment="Top" Width="278" ItemsSource="{Binding ChildViewModels}"/>
</Grid>
在正确的代码中,列表框将使用数据模板来显示子视图模型。但正如你所看到的,我不确定如何实例化与子相关的对象。感觉ParentViewModel将引用ParentModel并基于ParentModel的ChildModel对象创建ChildViewModel对象。现在我说它听起来并不那么愚蠢,但我会对你的想法感兴趣。
答案 0 :(得分:19)
你走在正确的轨道上。
父模型自然会包含子模型列表,例如:有多个订单的客户。
当第三方创建并加载ParentViewModel
时,会传递ParentModel
。然后ParentViewModel
将:
ParentModel
分配给本地变量ChildViewModel
创建一个ChildModel
ChildModel
到ChildViewModel
构造函数ChildViewModels
添加到列表顺便说一句,你想要
public List<ChildViewModel> ChildViewModels { get; set; }
是
public ObservableCollection<ChildViewModel> ChildViewModels { get; set; }