System.Windows.Data Error: 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')
<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="Gold"/>
</MultiDataTrigger>
<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="Gold"/> </MultiDataTrigger>
public class Bridge : FrameworkElement, INotifyPropertyChanged
{
public Bridge()
{
DataContext = this;
}
bool _BoolUserAddRows;
public bool BoolUserAddRows
{
get
{
return _BoolUserAddRows;
}
set
{
if (_BoolUserAddRows != value)
{
_BoolUserAddRows = value;
RaisePropertyChanged("BoolUserAddRows");
}
}
}
void RaisePropertyChanged(string prop)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
public event PropertyChangedEventHandler PropertyChanged;
}
public class Bridge : FrameworkElement, INotifyPropertyChanged { public Bridge() { DataContext = this; } bool _BoolUserAddRows; public bool BoolUserAddRows { get { return _BoolUserAddRows; } set { if (_BoolUserAddRows != value) { _BoolUserAddRows = value; RaisePropertyChanged("BoolUserAddRows"); } } } void RaisePropertyChanged(string prop) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(prop)); } public event PropertyChangedEventHandler PropertyChanged; }
<Window.Resources>
<local:Bridge x:Key="MyBridge"/>
</Window.Resources>
<Window.Resources>
<local:Bridge x:Key="MyBridge"/>
</Window.Resources>
<DataGrid x:Name="dataGrid2" ItemsSource="{Binding AllItems2}" CanUserAddRows="{Binding BoolUserAddRows, Source={StaticResource MyBridge}}" HorizontalAlignment="Left" VerticalAlignment="Top" >
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding BoolUserAddRows, Source={StaticResource MyBridge}}" Value="False" />
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Gold"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
<DataGrid x:Name="dataGrid2" ItemsSource="{Binding AllItems2}" CanUserAddRows="{Binding BoolUserAddRows, Source={StaticResource MyBridge}}" HorizontalAlignment="Left" VerticalAlignment="Top" > <DataGrid.CellStyle> <Style TargetType="{x:Type DataGridCell}"> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding BoolUserAddRows, Source={StaticResource MyBridge}}" Value="False" /> <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" /> </MultiDataTrigger.Conditions> <Setter Property="Background" Value="Gold"/> </MultiDataTrigger> </Style.Triggers> </Style> </DataGrid.CellStyle> </DataGrid>

