绑定ComboBox MVVM

时间:2018-07-26 16:45:39

标签: c# wpf mvvm

这是我第一次尝试绑定组合框。我正在尝试从数据库中获取值。但是,使用下面的代码,我得到的结果是(与表的行数相同的结果数):

  

GUITest.DB.Structure

其中GUITest->项目的名称空间,DB-> structure.cs所在的文件夹。

private ObservableCollection<Structure> _lists;
    public ObservableCollection<Structure> Lists
    {
        get { return _lists; }
        set
        {
            _lists = value;
            NotifyOfPropertyChange("Lists");
        }
    }

    public ObservableCollection<Structure> GetStructures()
    {
       ObservableCollection<Structure> products  = new ObservableCollection<Structure>();
        using (SqlConnection conn =
            new SqlConnection(ConfigurationManager.ConnectionStrings["StringConnexion"].ConnectionString))
        {
            conn.Open();

            SqlCommand cmdNotes =
                new SqlCommand("SELECT * FROM Structure", conn);


            using (SqlDataReader reader = cmdNotes.ExecuteReader())
            {

                var ordinals = new
                {
                    CodeStr = reader.GetOrdinal("CODE_STR"),
                    NomStr = reader.GetOrdinal("NOM_STR"),

                };

                while (reader.Read())
                {

                    var temp = new TableStructure();

                    temp.CodeStr = reader.GetString(ordinals.CodeStr);
                    temp.NomStr = reader.GetString(ordinals.NomStr);

                    products.Add(temp.SqlProduct2Product());
                }
            }
        }
        return products;  
    }

    public CreateAccountViewModel()
    {
        _lists = new ObservableCollection<Structure>();
        Lists = GetStructures();
    }

XAML:

<ComboBox SelectedItem="{Binding Path=NomStr}"  ItemsSource="{Binding Lists}"></ComboBox>

1 个答案:

答案 0 :(得分:1)

如评论中所述,您希望DisplayMemberPath而不是SelectedItem

DisplayMemberPath表示“将此属性(作为路径显示为 ItemTemplate ”),它在功能上等效于(尽管 not 代码等效) X的路径:

<ComboBox>
    <ComboBox.ItemTemplate>
       <DataTemplate>
         <TextBlock Text="{Binding Path=X}"/>
       </DataTemplate>
    </ComboBox.ItemTemplate
</ComboBox>

这就是为什么您没有Binding扩展名的原因,该框架会为您添加扩展名。

SelectedItem就是组合框的当前选择。它不会以任何方式影响显示。