2014-05-04 170 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

相關問題