我正在开发一个WPF项目,我正在创建一些样式,其中一个是DataGridCell
样式,它工作正常。
我的问题是:当用户删除任何行时,Visual Studio的“输出”窗口中会显示许多错误。
这是错误:
System.Windows.Data Warning: 4 : Cannot find source for binding with reference
'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid',
AncestorLevel='1''.
BindingExpression:Path=CanUserAddRows; DataItem=null; target element is 'DataGridCell'
(Name=''); target property is 'NoTarget' (type 'Object')
所以,我猜错误是因为当DataGridCell
从DataGrid
中移除时,绑定找不到父级,但是,我该怎么做才能避免这些错误?我的意思是,如何建立绑定条件?
我的XAML样式代码如下:
<DataGrid Margin="6,25,6,35" x:Name="dataGrid">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=CanUserAddRows}" Value="False" />
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="#A4A4A4"/>
</MultiDataTrigger>
. . . . .
希望有人可以帮助我,提前谢谢。
答案 0 :(得分:1)
我也遇到过这种问题,设置TargetNullValue和FallbackValue大部分时间都摆脱了这些绑定错误。
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType= {x:Type DataGrid}}, Path=CanUserAddRows,
TargetNullValue=False, FallbackValue=False}" Value="False" />
<Condition Binding="{Binding RelativeSource={RelativeSource Self},
Path=IsSelected, TargetNullValue=False,
FallbackValue=False}" Value="True" />
</MultiDataTrigger.Conditions>
一般情况下,我也会尝试尽量减少RelativeSource
的使用,尽可能使用DataContext
。