[英]Data Binding Combo Box in C# WPF
我在使用WPF的C#遇到问题。
这里只是简短。
下面的以下代码通过实体框架将名称收集到列表中。
这是在我的MainWindow.xaml.cs文件中。
public ObservableCollection<string> FruitInfo
{
get
{
using (var context = new Fruit())
{
ObservableCollection<string> fruits= new ObservableCollection<string>();
foreach (var item in context.Fruits.OrderBy(s => s.FruitName))
{
fruits.Add(item.FruitName);
}
return fruits;
}
}
}
在我的MainWindow.xaml
文件中,我具有以下内容:
<GroupBox Grid.Row="0" Grid.Column="0" Margin="5" Header="Fruit Info" >
<ComboBox Margin="5" SelectedItem="{Binding FruitInfo}"/>
</GroupBox>
运行我的项目时,我看到“组合框”没有填充水果。
有什么主意我为什么看不到吗?
所有想法表示赞赏
您应该将ComboBox的ItemsSource绑定到您的集合,并将SelectedItem绑定到另一个表示用户选择的字符串。
第一:
<GroupBox Grid.Row="0" Grid.Column="0" Margin="5" Header="Fruit Info" >
<ComboBox Margin="5" ItemsSource="{Binding FruitInfo}" SelectedItem="{Binding SelectedFruit}"/>
</GroupBox>
第二:在ViewModel中创建一个SelectedFruit
public string SelectedFruit { get; set; }
好的,即使我仍然不确定您为什么要尝试这样做,我也知道您想做什么。
使用using
的想法是它为您创建变量,并在您完成正在运行的代码块时将其处置。
现在,您正在该块中创建一个变量,然后将其返回...然后,系统尝试处理它。 因此,您的返回集合必须可以隐式转换为System.IDisposable,我怀疑您的是。
抛开这些,您应该遵循emedbo的建议。 您将源绑定到集合,并为所选索引具有另一个属性(因为您正在使用mvvm)。
我不会在getter内的using
获取像这样的数据,因为感觉您正在获取的数据可能会被删除,如果没有,那么您using
的整个使用都会有些错误。
更不用说它不是很可读,在大多数情况下,您应该着眼于可读性。
我不使用实体框架,但是我认为FruitInfo属性的模式缺少重要的一部分。
问题在于绑定机制无法实现新的ObservableCollection,因为它希望以某种“通知”方式来发出警报。 也就是说,您有几种解决问题的方法:
我建议这种解决方案:可靠且用途广泛。
这种方法也很有价值,但是添加任何已经从DependencyObject派生的类中公开的东西看起来毫无用处。 INotifyPropertyChanged非常适合POCO类(普通的CLR对象)。
它可以正常工作,但是您会失去数据上下文继承的好处,尤其是在模板中。
可行,但通常可在少数情况下应用。 还要求您确定知道对象创建的顺序。 保持最新状态。
==更新
尝试如下修改您的代码:
private ObservableCollection<string> _fruits = new ObservableCollection<string>();
public ObservableCollection<string> FruitInfo
{
get
{
using (var context = new Fruit())
{
this._fruits.Clear();
foreach (var item in context.Fruits.OrderBy(s => s.FruitName))
{
this._fruits.Add(item.FruitName);
}
return this._fruits;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.