2013-06-21 2 views
1

Я пытаюсь реализовать отношения мастер-деталь следующим образом:Как связать WPF с привязкой?

(shown in a ComboBox)      (shown in a DataGrid) 
|-----------|        |------------| 
| Customers |        | Orders  | 
|-----------|        |------------| 
| Id  |--- CustomersOrdersRelation ---| CustomerId | 
| Name  |        | OrderId | 
| ...  |        | ...  | 
|-----------|        |------------| 

Но у меня также есть < Все клиенты > пункт в выпадающем списке, для которого мне нужно видеть все заказы от всех клиентов отображается в файле datagrid.

Вот фрагмент кода XAML:

<ComboBox x:Name="CustomersComboBox" ...> 
    <ComboBox.ItemsSource> 
     <CompositeCollection> 
      <ComboBoxItem Content="{StaticResource nullCustomer}" /> <!-- I wrote my own class NullCustomer --> 
      <CollectionContainer Collection="{Binding Source={StaticResource CustomersCollectionViewSource}}" /> 
     </CompositeCollection> 
    </ComboBox.ItemsSource> 
</ComboBox> 

<DataGrid ItemsSource="{Binding ElementName=CustomersComboBox, Path=SelectedItem.CustomersOrdersRelation}" ...> 

Теперь у меня есть два вопроса:

  1. Каким Binding в DataGrid найти Path=SelectedItem.CustomersOrdersRelation когда выпадающий-х SelectedItem (который является DataRowView во время выполнения) не имеет свойства CustomersOrdersRelation?

  2. Что это самый простой способ для меня, чтобы изменить свой собственный NullCustomer класс, так что, когда я выбираю < Всех клиент > Я буду иметь результаты AllOrdersCollectionViewSource отображаемые?

ответ

1
  1. DataRowView реализует ICustomTypeDescriptor, который, вероятно, используемый связующей системы, чтобы определить, как получить эту собственность.

  2. Также дайте это имущество CustomersOrdersRelation, которое возвращает CompositeCollection, содержащий CollectionContainers для всех заказов клиентов.

+0

Благодарим вас @ H.B. Я реализовал решение, основанное на ваших ответах, и теперь он отлично работает. –