Datagrid组合框列填充了同一数据网格中另一列的值

时间:2016-06-01 13:46:26

标签: c# wpf mvvm combobox datagrid

我有DataGrid绑定到内存中的List<Coefficients>Coefficients类的ID为string Name,还有许多其他字段(某些名称和标识详细信息已更改以保护代码的隐私)。 DataGrid代码如下:

<DataGrid
    Name="coefficientList"
    ItemsSource="{Binding Data.CoefficientList, Mode=TwoWay}">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=Name, Mode=TwoWay}" />
        <DataGridTextColumn Binding="{Binding Path=Priority, Mode=TwoWay}" />
        ...
    </DataGrid.Columns>
</DataGrid>

现在,datagrid中的元素必须引用同一集合中的另一个元素,因此我在Coefficients类中有一个新字段:string ReferencedName。这是集合中引用元素的字符串ID。所以我想在datagrid中有一个新列,通过组合框选择引用元素的值,并且组合框需要填充相同数据网格的Name列。

我怎样才能实现这一目标?到目前为止,我尝试过类似的事情:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox
                SelectedValue="{Binding ReferencedName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},
                    Path=Data.NameList, Mode=TwoWay}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

其中NameList

public IEnumerable<string> NameList
{
    get
    {
        return CoefficientList.Select(c => c.Name);
    }
}

但到目前为止我尝试的任何内容总是给出一个没有选项的组合框,输出窗口中的错误就像

  

System.Windows.Data错误:40:BindingExpression路径错误:&#39;数据&#39;   在&#39; object&#39;上找不到的属性&#39;&#39;数据网格&#39;   (名称=&#39; coefficientList&#39;)&#39 ;.   BindingExpression:路径= Data.NameList;的DataItem =&#39;数据网格&#39;   (名称=&#39; coefficientList&#39);目标元素是&#39; ComboBox&#39;   (名称=&#39;&#39);目标属性是&#39; ItemsSource&#39; (键入&#39; IEnumerable&#39;)

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

Data.NameListDataContext对象的属性。改变绑定路径

Path=DataContext.Data.NameList