WPF DataTemplate和Binding - 在xaml中这可能吗?

时间:2010-09-23 18:29:30

标签: wpf xaml wpf-controls binding

我正在DataTemplating列表框的ItemSource以显示一系列组合框。我想将一个组合的DisplayMemberPath提供给一个属性,该属性与其自己的ItemsSource源不同。 (假设DisplayMemberPath只是一个表示属性名称的字符串,我从用户那里得到这个)。我用CollectionViewSource实现了这一点,但所有组合框都显示相同的列表。

我希望在数据模板化后显示组合框,

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
}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

我不确定你能否在XAML中做到这一点。 (将DisplayMemberPath指向位于DataContext以外的对象上的属性)。您可能需要查看RelativeSource Class,看看是否符合您的需求。

您是否考虑过将Employee对象中的引用提供给FilterElement,然后连接到您创建的Employee.PropertyMapOfEmployee属性的绑定?