2010-09-23 168 views
0

我是DataTemplating的列表框的ItemSource以顯示一系列組合框。我想將組合的DisplayMemberPath賦予一個屬性,該屬性與它自己的ItemsSource不同。 (假設DisplayMemberPath只是一個表示屬性名稱的字符串,我從用戶那裏得到這個)。我用CollectionViewSource實現了這一點,但所有組合框都顯示相同的列表。WPF DataTemplate和綁定 - 這可能在XAML?

什麼我期待着有後的數據模板是有組合框顯示,

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

這是可能在XAML實現?

謝謝。瑪尼

用戶控件:

<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> 

視圖模型:

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類的一個屬性,所以我不認爲這會起作用。 – 2010-09-23 18:49:47

+0

謝謝..這實際上修復了原來的和當前的問題。 – 2010-09-23 18:53:52

+0

它工作原理是因爲PropertyMapOfEmployee是FilterControls的一個特性,它綁定到ListBox(數據模型)。​​因此,組合綁定總是指父級,除非在綁定中使用'Source ='專門設置。因此它起作用。 – 2010-09-23 18:56:04

0

我不知道你能做到這一點的XAML。 (將DisplayMemberPath指向指向DataContext以外的對象的屬性)。你可能想看看RelativeSource Class看看是否能滿足你的需求。

您是否想過在您的Employee對象中向FilterElement提供一個引用,然後連接到您創建的Employee.PropertyMapOfEmployee屬性的綁定?

+0

這是可能的。見下文。 – 2010-09-23 18:54:08