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

本文关键字:组合 显示 成员 绑定 | 更新日期: 2023-09-27 17:51:14

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

<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属性,但可能在其他实例中这个属性不可用。

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

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

您可以使用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>

看看这是否对你有帮助

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

MyListOfObjects必须是对象的集合,'Name'必须是对象项的属性,然后它应该工作。我从这篇文章中提取了一个代码片段(与ListBox,但它应该是相同的组合框)。

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