2010-09-23 1 views
0

Я DataTemplating список ItemSource, чтобы показать серию comboboxes. Я хочу дать DisplayMemberPath комбо к собственности, которая находится в другом источнике, чем собственный ItemsSource. (Предполагая, что DisplayMemberPath - это просто строка, представляющая имя свойства, я получаю это от пользователя). Я достиг этого с помощью CollectionViewSource, но все выпадающие списки отображаются в том же списке.WPF DataTemplate и привязка - возможно ли это в xaml?

То, что я ожидал, чтобы после того, как данные шаблонный, чтобы иметь ComboBoxes дисплей,

ComboboxInstance1.DisplayMemberPath = PropertyMapOfEmployee in FilterControls[0] 
ComboboxInstance2.DisplayMemberPath = PropertyMapOfEmployee in FilterControls[1] 

ли это можно достичь в XAML?

Спасибо. Mani

UserControl:

<Resources> 
    <CollectionViewSource x:Key="bindingSource" Source="{Binding BindingItems}"/> 
    <CollectionViewSource x:Key="FilterSource" Source="{Binding FilterControls}"/> 

    <DataTemplate DataType="{x:Type CustomTypes:FilterElement}"> 
     <ComboBox ItemsSource="{Binding Source={StaticResource bindingEmp}" 
       DisplayMemberPath="{Binding Source={StaticResource FilterSource}, 
              Path=PropertyMapofEmployee}" /> 
    </DataTemplate> 

<Resources> 

--- 

<DockPanel> 
    <ListBox x:Name="lstBox" ItemsSource="{Binding FilterControls}" /> 
</DockPanel> 

ViewModel:

List<FilterElement> FilterControls; 
List<Employee> Employees 

class FilterElement 
{ 
    string Caption; 
    String PropertyMapofEmployee 
} 

ответ

3
<ComboBox ItemsSource="{Binding Source={StaticResource bindingEmp}" 
      DisplayMemberPath="{Binding PropertyMapofEmployee}" /> 
+0

Я не думаю, что PropertyMapOfEmployee является собственностью класса Employee, поэтому я не думаю, что это сработает. –

+0

Спасибо .. это на самом деле исправляет как исходную, так и текущую проблему. –

+0

Это работает, потому что PropertyMapOfEmployee является собственностью FilterControls, которая привязана к элементу ListBox (который привязан к дате). С учетом того, что комбо-привязки всегда ссылаются на родителя, если специально не задано использование «Source =» в привязке. Следовательно, это работает. –

0

Я не уверен, что вы можете сделать это в XAML. (Наличие DisplayMemberPath указывает на свойство, которое находится на объекте, отличном от DataContext). Вы можете посмотреть на RelativeSource Class, чтобы узнать, соответствует ли это вашим потребностям.

Задумались ли вы о предоставлении ссылки в объекте Employee FilterElement, а затем подключиться к привязке к свойству Employee.PropertyMapOfEmployee, которое вы создали?

+0

Возможно. Смотри ниже. –

Смежные вопросы