这是我第一次尝试绑定组合框。我正在尝试从数据库中获取值。但是,使用下面的代码,我得到的结果是(与表的行数相同的结果数):
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>
答案 0 :(得分:1)
如评论中所述,您希望DisplayMemberPath
而不是SelectedItem
DisplayMemberPath
表示“将此属性(作为路径显示为 ItemTemplate ”),它在功能上等效于(尽管 not 代码等效) X的路径:
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=X}"/>
</DataTemplate>
</ComboBox.ItemTemplate
</ComboBox>
这就是为什么您没有Binding
扩展名的原因,该框架会为您添加扩展名。
SelectedItem
就是组合框的当前选择。它不会以任何方式影响显示。