MVVM WPF Создание дочерних элементов - PullRequest
1 голос
/ 10 июля 2009

У меня есть объект Customer, у которого есть Список заказов. Теперь, используя шаблон MVVM, я отображаю список клиентов, который является частью CustomerOrderViewModel и «CustomerOrderView». Клиенты отображаются с использованием списка, как показано ниже:

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

Теперь мне также нужно отображать ордера, но мне нужно отображать их вне 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>

Я не хочу отображать заказы для всех клиентов. Я просто хочу отобразить заказ текущего выбранного клиента.

Ответы [ 2 ]

1 голос
/ 10 июля 2009

Вы можете использовать master-detail переплет.

0 голосов
/ 21 января 2010

Я бы предложил вам добавить дополнительный список в ваше окно и связать его 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...