2009-07-10 98 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>