从WinForm移植到WPF,数据绑定的问题

时间:2012-02-10 11:54:08

标签: wpf data-binding

我尝试将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}">

但这不起作用。

2 个答案:

答案 0 :(得分:1)

SelectedValuePathDisplayMemberPath应该是ComboBox中项目的属性名称,而不是绑定

<DataGridComboBoxColumn x:Name="iDTypeTaskColumn"
                        Header="IDType Task"
                        Width="SizeToHeader"
                        SelectedValuePath="TypeTask"
                        DisplayMemberPath="TypeTaskName"
                        ItemsSource="{Binding Source={StaticResource bindObjectsTaskViewSource}}" 
                        SelectedItemBinding="{Binding Path=tblDevTypeTask}">

其中bindObjectsTaskViewSource是对象的集合,并且该集合中的每个对象都有一个名为TypeTaskTypeTaskName的属性

答案 1 :(得分:0)

您的bindObjectsTaskViewSource是否在资源中声明可以通过这种方式访问​​... {StaticResource bindObjectsTaskViewSource}

如果没有,那么您应该首先学习WPF的基础知识,以便将SourceStaticResourceSource之间的区别理解为DataContext