我尝试将WinForms项目移植到WPF。但是我对数据绑定有些麻烦。
我的WinForms程序有DataGrid,它使用Data Binding Combobox
形式的列His **Data** properties:
DataPropertyName **Developer**
DataSource **developerBindingSource1**
DataMember **DeveloperName**
ValueMember **Developer**
下一个代码
developerBindingSource1.DataSource = DT.Developer;
taskBindingSource.DataSource = DT.Task;
typeTaskBindingSource.DataSource = DT.TypeTask;
developBindObjBindingSource.DataSource = DevelopBindObj.GetBindingList(DT.Developer);
typeTaskBindObjBindingSource.DataSource = TypeTaskBindObj.GetBindingList(DT.TypeTask);
我为dataBinding使用了额外的类
class DevelopBindObj
{
public Developer Developer { get; private set; }
public string DeveloperName
{
get
{
return this.Developer.FIO;
}
}
private DevelopBindObj(Developer Developer)
{
this.Developer = Developer;
}
public static IBindingList GetBindingList(IEnumerable<Developer>Developers) {BindingList<DevelopBindObj> result = new BindingList<DevelopBindObj>();
foreach (var ee in Developers)
{
result.Add(new DevelopBindObj(ee));
}
return result;
}
我怎么能在WPF中做到这一点?
我试过了:
<DataGridComboBoxColumn x:Name="iDTypeTaskColumn"
Header="IDType Task"
Width="SizeToHeader"
SelectedValuePath="{Binding Source={StaticResource bindObjectsTaskViewSource}, Path=TypeTask}"
DisplayMemberPath="{Binding Source={StaticResource bindObjectsTaskViewSource}, Path=TypeTaskName}"
ItemsSource="{Binding Source={StaticResource bindObjectsTaskViewSource}}" SelectedItemBinding="{Binding Path=tblDevTypeTask}">
但这不起作用。
答案 0 :(得分:1)
SelectedValuePath
和DisplayMemberPath
应该是ComboBox
中项目的属性名称,而不是绑定
<DataGridComboBoxColumn x:Name="iDTypeTaskColumn"
Header="IDType Task"
Width="SizeToHeader"
SelectedValuePath="TypeTask"
DisplayMemberPath="TypeTaskName"
ItemsSource="{Binding Source={StaticResource bindObjectsTaskViewSource}}"
SelectedItemBinding="{Binding Path=tblDevTypeTask}">
其中bindObjectsTaskViewSource
是对象的集合,并且该集合中的每个对象都有一个名为TypeTask
和TypeTaskName
的属性
答案 1 :(得分:0)
您的bindObjectsTaskViewSource
是否在资源中声明可以通过这种方式访问...
{StaticResource bindObjectsTaskViewSource}
如果没有,那么您应该首先学习WPF的基础知识,以便将Source
与StaticResource
和Source
之间的区别理解为DataContext
。