4

我有以下集合,我想将其绑定到组合框:

public ObservableCollection<Parameter> Values
{ get; set; }

public class Parameter
{
    public String Text { get; set; }
    public String Value { get; set; }
}

我需要将组合框的显示文本绑定到 Parameter 类的 Text 属性,我尝试了以下方法但均无济于事:

<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Parameter.Text"
<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Parameter\Text"
<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text"

当我尝试上面的 3 种方法时,[程序集名称].Parameter 显示在每个参数的组合框中。

上面的 2 种方法在组合框中不显示任何内容

<ComboBox ItemsSource="{Binding Values, Path=Text}"
<ComboBox ItemsSource="{Binding Values, Path=Values.Text}"

而这个采用第一个参数的文本,将其拆分为字符并将每个字符显示为组合框中的单独项目:

<ComboBox ItemsSource="{Binding Values, Path=Values/Text}"

在此处输入图像描述

更新:

这是所要求的完整 XAML 代码

<ListBox BorderBrush="{x:Null}" Grid.Column="0" Height="100" Grid.ColumnSpan="2" Grid.Row="1" ItemsSource="{Binding ItemParams}" ScrollViewer.VerticalScrollBarVisibility="Auto" Margin="2" HorizontalContentAlignment="Stretch">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="100" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock TextTrimming="CharacterEllipsis" Grid.Column="0" Margin="2" Text="{Binding Name}" Background="{Binding ElementName=cmbColors, Path=SelectedItem}"/>
                <ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text" SelectedIndex="0" HorizontalAlignment="Left" Grid.Column="1" Margin="2" Width="150" Name="cmbColors" >
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Grid.Column="1" Margin="2, 1" Text="{Binding}"/>
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

参数类:

public class Params
{
    public Params(String name, ObservableCollection<Parameter> values)
    {
        Name = name;
        Values = values;
    }

    public String Name
    { get; set; }

    public ObservableCollection<Parameter> Values
    { get; set; }
}
4

3 回答 3

6

正确的公式是您已经提到的公式之一:

<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text"

请再次检查,如果它不起作用,请逐字发布 XAML。

于 2012-06-29T07:38:48.660 回答
4

你可以直接做:

<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text" />

对于 WPF,ComboBox (ComboBoxItem) 的每个元素都是T类型的,因此它将在T上查找公共属性,这就是为什么只放置Text就可以了。

于 2012-06-29T07:39:06.827 回答
0

必须简单地删除组合框项目模板或设置Text="{Binding Text}"

   <ComboBox.ItemTemplate> 
        <DataTemplate> 
            <TextBlock Grid.Column="1" Margin="2, 1" Text="{Binding}"/> 
        </DataTemplate> 
    </ComboBox.ItemTemplate> 
于 2012-06-29T08:13:13.260 回答