我开始研究wpf,我尝试使用组合框,但到目前为止,我遇到了麻烦。我想要的是将组合框的值设置为基于我的项目表的主要ID,并根据我的表的项目名称列显示组合框的文本。
我有一个php背景,所以我尝试在那里编码,这样你们就能更好地理解我想要做的事情:
<?php
$con = mysqli_connect("localhost","root","","inventory");
echo "<form method='POST'>";
echo "<select name='value'>";
echo "<option>Select An Item</option>";
$item_query = mysqli_query($con,"SELECT * FROM item") or mysqli_error();
while($got = mysqli_fetch_assoc($item_query))
{
$item_id = $got['item_id'];
$item_name = $got['item_name'];
echo "<option value='$item_id'>$item_name</option>";
}
echo "</select>";
echo "<input type='submit' name='submit'/>";
echo "</form>";
if(isset($_POST['submit']))
{
echo $_POST['value'];
}
?>
到目前为止我在wpf上做了什么:
InitializeComponent();
comboBox.Items.Add("One");
comboBox.Items.Add("Two");
comboBox.Items.Add("Three");
这是我迄今为止唯一不幸做过的事情。我甚至没有将它连接到我的数据库,因为我首先想要确定如何才能应用这些值,然后才会应用我的数据库。
答案 0 :(得分:0)
假设您还没有MVVM模式的经验,请在XAML和代码隐藏文件中使用DataBinding。
您可以在以下链接中找到实施INotifyPropertyChanged的代码:http://www.codeproject.com/Articles/41817/Implementing-INotifyPropertyChanged
根据组合框的数据库表结构创建一个自定义类Item。也让你的类实现INotifyPropertyChanged接口。强制从属性的setter调用OnPropertyChanged方法。示例代码如下:
public class Item:InotifyPropertyChanged
{
private int id:
public int Id
{
get{return id;}
set
{
id=value;
OnPropertyChanged(new PropertyChangedEventArgs("Id"));
}
}
private string text;
public string Text
{
get { return text; }
set
{
text = value;
OnPropertyChanged(new PropertyChangedEventArgs("Id"));
}
}
3。 创建一个ObservableCollection类型的容器属性来保存类Window的ComboBox项,如下所示:
private ObservableCollection<Item> _items;
public ObservableCollection<Item> Items
{
get { return _items; }
set
{
_items = value;
OnPropertyChanged(new PropertyChangedEventArgs("Items"));
}
}
创建一个填充Items容器的方法,并在后面的代码中从Window构造函数中调用该方法。
最后,更改您的XAML ComboBox定义如下:
<ComboBox ItemsSource="{Binding Items}"
DisplayMemberPath="Text"
SelectedValuePath="Id"/>