2014-05-04 130 views
0

我正在开发一个桌面应用程序并设计一个MVVM pattrn。我保留一份具有他们技能的人员名单。我一个人的模型是一样的东西:如何在另一个模型中有一个模型列表?

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    // Other properties 
} 

和我有本事类

public class Skill 
{ 
    public string Name { get; set; } 
    public bool IsOn { get; set; } 
} 

正如你可能会注意到每个技能都有一个名字和ISON财产。每当它是真实的,这意味着该人有技能。

现在我需要知道在MVVM模式下,我的Person模型中有一个List proeprty吗? 以及如何将此列表绑定到具有多选模式的ListBox?以便每当用户点击列表框中的项目时,选定或取消选定selectedItem(Selected Skill)的IsOn proeprty?

在此先感谢您的帮助。

回答

1

对于您的模型,MVVM是不可知的。你的模型可以(而且将会)是任何东西:你自己的类中的一个,别人的类,数据库,专有主机等等。因此,在回答“如果在MVVM模式下,我的Person模型中有一个List属性是可以的吗?”答案是“无论对你的模型有意义”。 :)

MVVM中通常不会有什么好的地方是将模型直接暴露给视图。该视图反映了视图模型的状态,绑定到并路由命令,而不是模型。理想情况下,View对模型只有ViewModel一无所知。

因此,让我们定义一个ViewModel类的中间集合,并开始思考这些类。

public class MainVM : ViewModelBase 
{ 
    public ObservableCollection<PersonVM> People { get; set; } 
} 

public class PersonVM : ViewModelBase 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public ObservableCollection<SkillVM> Skills { get; set; } 
} 

public class SkillVM : ViewModelBase 
{ 
    public string Name { get; set; } 
    public bool IsOn { get; set; } 
} 

您的视图将绑定到这些viewmodel类的属性,而不会绑定到您的模型本身的属性。您的“人员列表”视图将绑定到“人员”集合。你的“技能列表”控制将绑定到“技能”集合。并确定一个技术已被选定,或选择技能,你可以这样做(假设一个WPF/Silverlight的风格XAML驱动的视图):

<DataGrid ... ItemsSource="{Binding Skills}" ... /> 
<DataGrid.RowStyle> 
    <Style TargetType="DataGridRow"> 
     <Setter Property="IsSelected" Value="{Binding IsOn, Mode=TwoWay}" /> 
    </Style> 
</DataGrid.RowStyle> 
+0

你帮了我很多,到目前为止,除非我还没有弄清楚我应该如何设置模型属性。我到目前为止所做的事情是让PersonVM保留Person模型的ObsrvableCollection,然后在PersonVM中以及我绑定到CurrentItem属性的视图中有一个CurrentItem。例如。现在我需要知道我应该如何尊重您的设计。 – user3530012

相关问题