我有以下集合,我想绑定到组合框:
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种方法时,。参数显示在每个参数的组合框中。
上述两种方法在组合框中不显示任何内容
<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>
Params课程:
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; }
}
答案 0 :(得分:6)
正确的表述是你已经提到的那个:
<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text"
请再次检查,如果它不起作用,请发布您已逐字记录的XAML。
答案 1 :(得分:2)
你可以直接做:
<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text" />
对于WPF,ComboBox(ComboBoxItem)的每个元素都是 T 类型,因此它会在 T 上查找公共属性,这就是为什么只需要文字将有效。
答案 2 :(得分:0)
只需删除组合框项目模板或设置Text="{Binding Text}"
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Grid.Column="1" Margin="2, 1" Text="{Binding}"/>
</DataTemplate>
</ComboBox.ItemTemplate>