我有一个EditTemplate
为网格定义的 Xceed DataGrid。
网格显示绑定到大约 6 列的集合的项目列表,并且EditTemplate
是TextBox
用于输入数量的控件。我希望该IsReadOnly
属性绑定到不同的属性,以便该项目具有序列号,IsReadOnly
将设置为 true 以便用户无法输入值。我想绑定到SerialNum
同一个集合中的属性并将其传递给转换器以返回真/假值。我已经写好了转换器;但是,我在绑定到要传递给转换器的属性时遇到问题。
我DataGridCollectionViewSource
的很简单:
<xcdg:DataGridCollectionViewSource x:Key="transferItems" Source="{Binding TransferItems}" />
TransferItems
在我的 ViewModel 中设置,并且所有列都正确绑定。
对于我所有的通用显示列,它们通过以下方式正确显示:
<xcdg:Column Title="Serial No." AllowSort="False" FieldName="SerialNum" />
我的问题在于定义xcgd:CellEditor
模板,我很确定我的问题是围绕RelativeSource
. 我尝试了许多不同的组合,试图TransferItems.SerialNum
从我的 ViewModel 中获取该属性,但没有任何组合有效。
这是我目前拥有的:
<xcdg:Column Title="Xfer Qty Good" TextWrapping="Wrap" ReadOnly="False" Width="50" AllowGroup="False" AllowSort="False" FieldName="TransferQtyGood">
<xcdg:Column.CellEditor>
<xcdg:CellEditor>
<xcdg:CellEditor.EditTemplate>
<DataTemplate>
<TextBox x:Name="QtyGood" Margin="2,2,2,2" Width="50" HorizontalAlignment="Center" VerticalAlignment="Center"
Text="{xcdg:CellEditorBinding}" IsReadOnly="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type xcdg:DataGridCollectionViewSource}}, Path=DataContext.TransferItems.SerialNum, Converter={StaticResource serialToEnabledConverter}}"
/>
</DataTemplate>
</xcdg:CellEditor.EditTemplate>
</xcdg:CellEditor>
</xcdg:Column.CellEditor>
</xcdg:Column>
这给出了运行时错误:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='Xceed.Wpf.DataGrid.DataGridCollectionViewSource', AncestorLevel='1''. BindingExpression:Path=DataContext.TransferItems.SerialNum; DataItem=null; target element is 'TextBox' (Name='QtyGood'); target property is 'IsReadOnly' (type 'Boolean')
我明白错误告诉我什么,但我只是得到了正确的RelativeSource
路径。我已经阅读了一些关于枚举的有用帖子,但RelativeSource
仍然缺少一些东西。