2012-07-13 42 views
3

我正在一個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') 

所以,我想這個錯誤是因爲當DataGridCellDataGrid刪除,綁定不找家長,但是,我能做些什麼避免得到這些錯誤?我的意思是,我怎樣才能建立綁定的條件?

我的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> 
. . . . . 

希望有人能幫助我,在此先感謝。

回答

1

我也遇到過這類問題,並且設置TargetNullValueFallbackValue大多數時候擺脫了這些綁定錯誤。

<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儘可能。

+0

感謝您的回覆,我是WPF新手,我有一個問題,這個答案可以應用在'Condition'的'Binding'屬性中? – Dante 2012-07-17 02:21:40

+0

@Dante是的,你可以,這些是綁定類的屬性,所以他們會爲每一個綁定工作;爲參考添加代碼。 – akjoshi 2012-07-17 05:50:29

+2

嗨akjoshi,我剛剛嘗試了你的建議,但我仍然收到相同的錯誤 – Dante 2012-07-18 14:23:11