2012-07-13 2 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

+0

@ 단테 가능합니다. 이들은 Binding 클래스의 속성이므로 모든 Binding에서 작동합니다. ref에 대한 코드가 추가되었습니다. – akjoshi

+2

안녕하세요 akjoshi, 그냥 당신이 제안한 것을 시도했지만 여전히 동일한 오류가 발생했습니다 – Dante

관련 문제