我有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;)
有人能指出我正确的方向吗?
答案 0 :(得分:1)
Data.NameList
是DataContext
对象的属性。改变绑定路径
Path=DataContext.Data.NameList