日期:2014-05-17  浏览次数:20913 次

WPF 数据绑定问题
程序中有个ComboBox,初始化时从数据库查询到了所以需要显示的列,并绑定到ComboBox(cbNameType.ItemsSource = GetNameTypeAll();),运行后下拉列表中显示了所以的列,这个没问题。

然后还有个Grid ,Grid是ComboBox的父控件。每次操作时在代码中查询出一条数据记录并将记录数据赋值给Grid.DataContent,这样Grid中的子元素根据绑定Path就可以显示数据,但是ComboBox没有显示DataContent中绑定的对象。

可能上面的描述不是很清楚,我举个例子:我有两个类 
class Product
{
int ID;
string Name;
ProductType pdType;
}

class ProductType
{
int ID;
string TypeName;
}

现在界面上有三个元素Grid ComboBox TextBox,Grid包含后两个。TextBox的绑定Text="{Binding Path=Name}" ,ComboBox 的绑定SelectedItem="{Binding Path=pdType}",ComboBox 显示属性DisplayMemberPath="TypeName"

首先,程序初始化时从数据库获取所以ProductType,并将其绑定给ComboBox,
List<ProductType> allPt= GetProductTypeAll();
cbProductType.ItemsSource=allPt;
这样ComboBox的下拉列表中就可以显示所以的ProductType类型数据。

当从数据库获取一个Product对象的数据Product pt = GetProduct();并将其赋值给Grid的DataContent,gridProduct.DataContext = pt;
这样TextBox可以显示pt对象中的Name属性,但是ComboBox没有按照预期的自动选择pdType对应allPt中的选项。

小弟刚刚开始研究WPF关于绑定的东西,所以请各位帮忙解答一下疑惑

------解决方案--------------------
正好有个小例子,不知道是不是你说的那种情况
------解决方案--------------------
你的comobox绑定有问题
List<ProductType> allPt= GetProductTypeAll();
cbProductType.ItemsSource=allPt;
这句写的就是绑定allpt 然后SelectedItem="{Binding Path=pdType}"
这样估计就有问题了
或者你绑定的时候手动设置下
List<ProductType> allPt= GetProductTypeAll();
cbProductType.ItemsSource=allPt;
cbProductType.SelectedItem="XXXXX";

这样是可以的.....
------解决方案--------------------
如果想绑定这样的对象 请实现INotifyPropertyChanged接口 
然后把你要改变跟新的property抛事件
这样ui才知道更新了 才会自动跟新
这个微软msdn里面都有讲
仔细看看吧