Гораздо лучший способ - привязать ваш список к объекту, который вы создаете.Таким образом, вы можете указать свойства для DisplayMemberPath (что вы видите) и SelectedValuePath (внутреннее значение ваших программ).
Вот ваш основной код XAML.Обратите внимание, что метод щелчка кнопки будет отображать текущее выбранное значение ComboBox.Это облегчит жизнь позже.Надеюсь, это не излишне, но демонстрирует несколько принципов, облегчающих WPF.
namespace WPFListBoxSample {
public partial class Window1 : Window
{
WPFListBoxModel model = new WPFListBoxModel();
public Window1()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Window1_Loaded);
}
void Window1_Loaded(object sender, RoutedEventArgs e)
{
GetData();
this.DataContext = model;
}
public void GetData()
{
//SqlConnection myConnection = new SqlConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "ProgramsList.sdf");
SqlConnectionStringBuilder str = new SqlConnectionStringBuilder();
str.DataSource="192.168.1.27";
str.InitialCatalog="NorthWnd";
str.UserID="sa";
str.Password="xyz";
SqlConnection myConnection = new SqlConnection(str.ConnectionString);
SqlDataReader myReader = null;
myConnection.Open();
SqlDataReader dr = new SqlCommand("SELECT CategoryId, CategoryName FROM Categories ORDER BY CategoryName DESC", myConnection).ExecuteReader();
while (dr.Read())
{
model.Categories.Add(new Category { Id = dr.GetInt32(0), CategoryName = dr.GetString(1) });
}
myConnection.Close();
}
private void myButton_Click(object sender, RoutedEventArgs e)
{
if (this.myCombo.SelectedValue != null)
MessageBox.Show("You selected product: " + this.myCombo.SelectedValue);
else
MessageBox.Show("No product selected");
}
}
}
XAML
<Grid>
<StackPanel>
<ComboBox x:Name="myCombo" ItemsSource="{Binding Categories}" DisplayMemberPath="CategoryName" SelectedValuePath="Id" />
<Button x:Name="myButton" Content="Show Product" Click="myButton_Click"/>
</StackPanel>
</Grid>
Ваш собственный объект для представления категории
namespace WPFListBoxSample
{
public class Category
{
public int Id { get; set; }
public string CategoryName { get; set; }
}
}
Обратите внимание на {get;set;} s
Наконец, немного клея, облегчающего многие вещи, - это помещение всех ваших данных в модель и привязка к модели.Это способ работы WPF.
using System.Collections.Generic;
namespace WPFListBoxSample
{
public class WPFListBoxModel
{
private IList<Category> _categories;
public IList<Category> Categories
{
get
{
if (_categories == null)
_categories = new List<Category>();
return _categories; }
set { _categories = value; }
}
}
}