2009-07-10 68 views
1

我有一個Customer對象,它有一個Orders列表。現在,使用MVVM模式,我顯示了CustomerOrderViewModel和「CustomerOrderView」一部分的客戶列表。客戶使用如下實現的列表框來顯示:MVVM WPF創建子元素

<ListBox BorderThickness="0" Grid.Column="0" Grid.Row="0" ItemsSource="{Binding Path=Customers}">     
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel> 
         <view:CustomerView />     
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate>     
      </ListBox> 

現在我還需要顯示訂單,但我需要在列表框外顯示它。就像這樣:

<StackPanel Grid.Column="1" Grid.Row="0" Margin="10"> 

       <ItemsControl ItemsSource="{Binding Path=Orders}"> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=Name}" /> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 

      </StackPanel> 

這不起作用,因爲沒有爲訂單上CustomerOrderViewModel沒有財產。訂單是Customer對象上的一個集合。我怎樣才能實現它?

這裏是更新的例子:

<ListBox BorderThickness="0" Grid.Column="0" Grid.Row="0" ItemsSource="{Binding Path=Customers}">     
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
         <view:CustomerView /> 

          <StackPanel Margin="20"> 

           <ItemsControl ItemsSource="{Binding Path=Orders}"> 
            <ItemsControl.ItemTemplate> 
             <DataTemplate> 
              <view:OrderView /> 
             </DataTemplate> 
            </ItemsControl.ItemTemplate> 
           </ItemsControl> 

          </StackPanel> 

         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate>     
      </ListBox> 

我不想顯示該訂單的所有客戶。我只想顯示當前選定客戶的訂單。

回答

1

您可以使用master-detail綁定。

+0

我更新了這篇文章。我擔心的一件事是,爲什麼我必須使用ContentControl,爲什麼我不能使用簡單的控件來顯示所有信息。 – azamsharp 2009-07-10 17:53:35

0

我建議你添加一個額外的列表到你的窗口,並將其DataContext綁定到ListBox中當前選定的客戶。它會是這樣的:

 <ListBox BorderThickness="0" Grid.Column="0" Grid.Row="0" 
      ItemsSource="{Binding Path=Customers}" 
      x:Name="CustomerList"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <view:CustomerView /> 
       </DataTemplate> 
      </ListBox.ItemTemplate>     
     </ListBox> 

     <ListBox Grid.Column="1" Grid.Row="0" DataContext="{Binding ElementName=CustomersList, Path=SelectedItem}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <view:Order DataContext="{Binding Path=Orders}" /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox>