2011-01-30 30 views
1

MVVM質疑的Windows PhoneMVVM - 在單頁/綁定列表如何設置的MainView和ItemView控件模型和建立數據綁定

假設你想有多個列表中的視圖模型,並有說有一個數據透視表每個面板中的不同列表框。爲了說明的目的,我們可以說我們在單個頁面中有兩個用於人員和地點的列表框,但在不同的面板上。 (PeopleList和PlacesList)

你如何設置你的ViewModels。每個列表是否有一個MainViewModel?一個包含兩個列表的MainViewModel?我希望能夠根據他們的選擇導航到適當的詳細信息頁面詳細信息頁面。

其次,如何在加載表單時將每個列表框綁定到不同的viewmodel。

我的疑惑是,例子似乎表明,當一個窗體被加載時,你將上下文設置爲一個「靜態變量」,而不知道如何指定每個列表框的不同源。

下面是一些示例代碼片段...有問題嗎?

DataContext = App.ViewModel ; 


    public class MainViewModel : INotifyPropertyChanged 
    { 
     public MainViewModel() 
     { 
      this.Items = new ObservableCollection<ItemViewModel>(); 
//?? can you have more than one of these? 
     } 

//?? should I have Public MainViewModel2() with this.Items = new OC<IVM2> 
//... 

/// Creates and adds a few ItemViewModel objects into the Items collection. 
     /// </summary> 
     public void LoadData() 
     { 
      this.Items.Add(new ItemViewModel() { VAR1 = "X", VAR2 = "Y"}) ; 

 

<Grid x:Name="LayoutRoot" Background="Transparent" > 
      <!--Pivot Control--> 
     <controls:Pivot x:Name="Pivot" Title="MyApp" DataContext="{Binding}" Loaded="Pivot_Loaded"> 
      <!--Pivot item one--> 

... 

    <!--Pivot item two--> 
      <controls:PivotItem Header="people"> 

       <Grid> 
        <ListBox x:Name="PeopleList" Height="442" HorizontalAlignment="Left" Margin="46,68,0,0" VerticalAlignment="Top" Width="346" ItemsSource="{Binding ItemsA}" SelectionChanged="ListBox1_SelectionChanged" /> 
       </Grid> 

<!--Pivot item three--> 
      <controls:PivotItem Header="places"> 

       <Grid> 
        <ListBox x:Name="PlacesList" Height="442" HorizontalAlignment="Left" Margin="46,68,0,0" VerticalAlignment="Top" Width="346" ItemsSource="{Binding ItemsB}" SelectionChanged="ListBox2_SelectionChanged" /> 
      </Grid> 

回答

2

解答一些問題:

多少/它的ViewModels?

你應該在這裏肯定有一個MainViewModel。然後將該MainViewModel有類型PeopleListViewModelPlacesListViewModel,或

  • 兩個列表的屬性ObservableCollection<PersonViewModel>ObservableCollection<PlaceViewModel>

    • 兩個屬性。是的,你可以擁有儘可能多的喜歡,但稱它們爲ItemsA和ItemsB不是最好的選擇。

    在第一個選項中,創建2個視圖(UserControls)來保存列表。

    在第二個選項中,您可以使用ItemsControl和DataTemplate來顯示列表。

    而且一般來說,在MVVM中儘量避免SelectedItemChanged和其他事件。您可以將數據綁定(View的一部分)到SelectedItem屬性中。

  • +0

    這非常有幫助。 – 2011-01-30 17:09:25