绑定在项目模板中显示组合框的成员

时间:2015-05-29 10:44:03

标签: c# wpf data-binding devexpress

我有一个组合框,我在其中设置了显示成员属性。

<dxe:ComboBoxEdit EditValue="{Binding MyEditVale}" ItemsSource="{Binding MyListOfObjects}" DisplayMember="{Binding MyDisplayMember}" ItemTemplate="{StaticResource ColoredTemplate}"/>

但是,我想在项目模板中使用display member属性。

 <DataTemplate x:Key="ColoredTemplate">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="10"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>

                <StackPanel Grid.Column="0" ToolTip="This entry has been made obsolete please select another option" Background="Red" Visibility="{Binding IsObsolete, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                <TextBlock  Grid.Column="1" Text="{*I want to bind to the display member here*}" Margin="2,0,0,0"/>
            </Grid>
        </DataTemplate>

我很难让这个工作。 出于测试目的,我一直在使用此代码。

<TextBlock  Grid.Column="1" Text="{Binding Name}" Margin="2,0,0,0"/>

我绑定的对象确实有一个Name属性,但可能还有其他不可用的实例。

有没有办法直接使用/绑定项目模板中的显示成员属性?

3 个答案:

答案 0 :(得分:1)

您可以同时使用DisplayMemberPathItemTemplate,但不能同时使用两者。

<强>的DisplayMemberPath

<ComboBox ItemsSource="{Binding Path=MyListOfObjects}" DisplayMemberPath="Name"/>

<强>的ItemTemplate

<ComboBox ItemsSource="{Binding Path=MyListOfObjects}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="10"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>

                <StackPanel Grid.Column="0" ToolTip="This entry has been made obsolete please select another option" Background="Red" Visibility="{Binding IsObsolete, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                <TextBlock  Grid.Column="1" Text="{Binding Path=Name}" Margin="2,0,0,0"/>
            </Grid>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

答案 1 :(得分:0)

看看这有助于你

<TextBlock  Grid.Column="1" Text="{Binding DisplayMember, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dxe:ComboBoxEdit}}}" Margin="2,0,0,0"/>

答案 2 :(得分:0)

MyListOfObjects必须是对象的集合,'Name'必须是对象项的属性,然后才能工作。我从这个post获取了一个代码片段(使用ListBox,但对于Combobox应该是相同的)。

<ListBox Grid.Row="0" ItemsSource="{Binding SelectedFiles}" Grid.IsSharedSizeScope="True">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition SharedSizeGroup="col0"></ColumnDefinition>
                    <ColumnDefinition SharedSizeGroup="col1"></ColumnDefinition>
                    <ColumnDefinition SharedSizeGroup="col2"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding Name}" Margin="10,0"></TextBlock>
                <TextBlock Grid.Column="1" Text="{Binding Length}" Margin="10,0"></TextBlock>
                <TextBlock Grid.Column="2" Text="{Binding LastAccessTime}" Margin="10,0"></TextBlock>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

SelectedFiles只是一个FileInfo列表

public List<FileInfo> SelectedFiles
{
    get;
    set;
}