2016-08-31 1 views
0

WPF에서 GridViewColumn에 대해 DisplayMemberBinding을 설정했습니다.WPF : GridViewColumn의 DisplayMemberBinding에 PriorityBinding 사용

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}" DisplayMemberBinding="{Binding Exception, Mode=OneWay, Converter={StaticResource typeConverter}, FallbackValue='---'}"/> 

typeConverter는이 GUI에 문자열 예외의 종류를 표시하도록 Exception.GetType() 확장자 '모방'이. 예외가없고이 값이 null 인 경우이 열에 다른 속성을 출력하고 싶습니다. 이제 DisplayMemberBinding에 대해서는 PriorityBinding을 사용하고 싶지만 GridViewColumn은 '하위 요소'로 PriorityBinding을 제외하고 '하위 요소'로는 DisplayMemberBinding 속성을 사용할 수 없습니다. 이 같은 GridViewColumn에 대한 PriorityBinding를 사용하는 방법이있다 :

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}"> 
    <PriorityBinding> 
     <Binding Path="Exception" Mode="OneWay" Converter="{StaticResource typeConverter}" IsAsync="True" /> 
     <Binding Path="AnotherProperty" IsAsync="True" /> 
    </PriorityBinding> 
</GridViewColumn> 

편집

나는 아래의 "재"의 제안에 내 코드를 변경,하지만 그것은 작동하지 않습니다

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderErrorType}"> 
    <GridViewColumn.DisplayMemberBinding> 
     <PriorityBinding FallbackValue="-*-"> 
      <Binding Path="Exception" Converter="{StaticResource typeConverter}" Mode="OneWay" IsAsync="True"/> 
      <Binding Path="Comment" FallbackValue="---"/> 
     </PriorityBinding> 
    </GridViewColumn.DisplayMemberBinding> 
</GridViewColumn> 

Exception 속성이 null 인 경우 표시 값이 비어 있습니다. 두 번째 바인딩 속성 인 "comment"가 설정되어 있는지 확인했습니다.

이 두 바인딩이 제대로 작동 : 당신이 <GridViewColumn.DisplayMemberBinding> 태그 누락

<GridViewColumn Header="{x:Static resx:TextResources.ExcutionTimesHeaderComment}" DisplayMemberBinding="{Binding Comment, FallbackValue='---'}"/> 

<GridViewColumn Header="test2" DisplayMemberBinding="{Binding Exception, Mode=OneWay, Converter={StaticResource typeConverter}, FallbackValue='---'}"/> 

답변

1

:

<GridViewColumn> 
    <GridViewColumn.DisplayMemberBinding> 
     <PriorityBinding> 
      <Binding Path="Exception" Mode="OneWay" Converter="{StaticResource typeConverter}" IsAsync="True" /> 
      <Binding Path="AnotherProperty" IsAsync="True" /> 
     </PriorityBinding> 
    </GridViewColumn.DisplayMemberBinding> 
</GridViewColumn> 

GridViewColumn이 ContentProperty 속성 및 콘텐츠 특성으로 표시되어 헤더입니다 : [ContentProperty("Header")]. 따라서 GridViewColumn.이없는 <GridViewColumn> 태그의 내부 내용은 헤더 속성에 할당되어야합니다.

+0

답변 해 주셔서 감사합니다! 나는 당신이 가정 한대로 그것을 구현했지만 제대로 작동하지 않습니다. "Exception-Binding"이 null 인 경우 두 번째 바인딩 및 우선 순위 바인딩에 대해 fallbackValues를 정의했지만 아무 값도 표시하지 않습니다. 나는 위의 내 게시물을 편집했습니다. – rbr94

+1

@RobinBreusch, Exception이 null이고 변환기가 null 또는 빈 문자열을 반환하면 PriorityBinding이이를 올바른 값으로 받아들이고 Anotherproperty 바인딩을 사용하지 않습니다 (정보 : https://msdn.microsoft.com/en-us) /library/system.windows.data.prioritybinding(v=vs.110).aspx#Anchor_6). 예외가 null 인 경우 컨버터에서'DependencyProperty.UnsetValue'를 반환하십시오. – ASh

+0

그게 문제를 해결했습니다. 고마워요! – rbr94