ComboBox中的SelectedItem未设置为数据字段

时间:2015-05-04 15:37:12

标签: c# xaml combobox wpf-controls

由于某种原因,SelectedItem未设置为数据库中的任何字段。

XAML:

            <!-- Type -->
            <Label Grid.Column="0" Grid.Row="1"
                   Style="{StaticResource FormLabelStyle}"
                   Content="Type:"/>
            <Border Grid.Column="1" Grid.Row="1"
                    Style="{StaticResource FormBorderStyle}"
                    Width="350">
                <ComboBox x:Name="codeType" Margin="5" Padding="0"
                          FontSize="20" FontFamily="Arial" BorderThickness="0"
                          BorderBrush="Transparent" Background="White"
                          Text="{Binding CodType}" SelectedItem="{Binding CodType}">
                    <ComboBoxItem Content="C"/>
                    <ComboBoxItem Content="C++"/>
                    <ComboBoxItem Content="C#"/>
                    <ComboBoxItem Content="PL/SQL"/>
                    <ComboBoxItem Content="SQL"/>
                    <ComboBoxItem Content="HTML"/>
                    <ComboBoxItem Content="XAML"/>
                    <ComboBoxItem Content="Unix Shell Script"/>
                </ComboBox>
            </Border>

代码背后:

public ChangeCode(CodeRecord codRec)
{
    _codeRecord = codRec;
    this.DataContext = _codeRecord;

    InitializeComponent();
}

当显示屏幕时,我想要选择当前的CodType字段。调试显示它确实不是null并且是组合框架之一。组合框没有显示任何选择。我做错了什么?

1 个答案:

答案 0 :(得分:0)

当您创建ComboBoxItem时,内容文本是字符串,字符串类没有显示文本的属性,它可能允许您使用string.ToString()进行选择,但是当显示屏幕时它不会& #39; t具有与ComboBox项匹配的属性,并显示SelectedValue中的内容。为了解决这个问题,您必须使用属性ValueString

创建一个新类ComboBoxItemString,如下所示
public class ComboBoxItemString
{
    public string ValueString { get; set; }
}

然后在资源中创建ComboBoxItemString的数组(CodeTypesList),如下所示,并将其绑定到ItemsSource,然后使用DisplayMemberPath和SelectedValuePath中的poperty ValueString

<Border Grid.Column="1" Grid.Row="1"
        Style="{StaticResource FormBorderStyle}"
        Width="350">
    <Border.Resources>
        <x:Array x:Key="CodTypesList" Type="local:ComboBoxItemString">
            <local:ComboBoxItemString ValueString = "C"/>
            <local:ComboBoxItemString ValueString = "C++"/>
            <local:ComboBoxItemString ValueString = "C#"/>
            <local:ComboBoxItemString ValueString = "PL/SQL"/>
            <local:ComboBoxItemString ValueString = "SQL"/>
            <local:ComboBoxItemString ValueString = "HTML"/>
            <local:ComboBoxItemString ValueString = "XAML"/>
            <local:ComboBoxItemString ValueString = "Unix Shell Script"/>
        </x:Array>
    </Border.Resources>
    <ComboBox x:Name="codeType" Margin="5" Padding="0"
              FontSize="20" FontFamily="Arial" BorderThickness="0"
              BorderBrush="Transparent" Background="White" 
              SelectedValue="{Binding CodType}"
              ItemsSource="{StaticResource CodTypesList}" 
              DisplayMemberPath="ValueString" SelectedValuePath="ValueString" />
</Border>

现在,当你进入屏幕时,应该使用该属性在ComboBox中显示以前选择的值