2012-08-27 3 views
3

CollectionViewSource에 바인딩되는 DataGrid가 있습니다.
각 열에 바인딩의 Path 속성을 지정하여 표시 할 특정 정보를 가져옵니다.바인드 DataGridTextColumn WPF의 가시성 속성

사용자가 추가 정보를 원할 경우 체크 박스를 사용하여 일부 열을 토글하고 싶습니다. 이렇게하려면 visibility 속성을 (변환기가있는) 확인란의 값에 바인딩해야하지만 저는 열의 데이터 컨텍스트가 바인딩을 방해하고 있음을 확신합니다. 나는했습니다,

<DataGrid ItemsSource="{Binding Source={StaticResource cvs}}" ....> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}" 
      Visibility="{Binding IsChecked, 
           ElementName=IncludeFullHist, 
           Converter={StaticResource boolItemsConverter}}"/> 
    </DataGrid.Columns> 
</DataGrid> 

은 나뿐만 아니라 내 ViewModel에있는 체크 박스를 필요, 그래서 나는 그 IsChecked 속성이 내 페이지의 다른 요소의 내 뷰 모델

<CheckBox x:Name="IncludeFullHist" IsChecked="{Binding Path=ManagerFullHist }" /> 

에 속성에 바인딩이 다음 두 가지 방법 중 하나를 사용하여 가시성 바인딩을 연결할 수 있었지만 둘 다 데이터 그레이드로 복사 할 때 작동하지 않는 것으로 보입니다.

<TextBlock DockPanel.Dock="Left" Text=" Visible 2 " 
    Visibility="{Binding Path=DataContext.ManagerFullHist, 
         RelativeSource={RelativeSource FindAncestor, 
         AncestorType={x:Type UserControl}}, 
         Converter={StaticResource boolItemsConverter}}"/> 
<TextBlock DockPanel.Dock="Left" Text=" Visible 3 " 
    Visibility="{Binding Path=ManagerFullHist, 
         Source={StaticResource mainWinResource}, 
         Converter={StaticResource boolItemsConverter}}"/> 

DataGrid에서이 문제를 해결할 수있는 방법에 대한 제안이 있으십니까?
잠재적으로 도움이 될 수있는 코드가 누락 되었다면 알려주십시오. 클래스에 바인딩이 자신의 소스 찾을 수 없습니다

당신은 CellStyle 또는 DataGridColumnHeaderStyle에서 VisibilityWidth 재산 같은 것들을 설정할 수 있도록

+0

@Rachel 레이첼을 볼 수 있습니다, 귀하의 답변에 감사드립니다! 이것은 제가 겪고있는 정확한 문제입니다. 나는 더 가까이에서 느끼지만 바인딩은 여전히 ​​작동하지 않습니다. 링크 된 기사에 따라'BindingProxy' 클래스를 설정했습니다. 내 사용자 정의 컨트롤에 대한 'DataContext'는 내 ViewModel 클래스로 설정되어 있고 DataGrid는 datacontext를 상속받습니다. 내 DataGrid와 사용자 컨트롤에 "프록시"리소스를 넣으려고 시도하고'Path = DataContext.ManagerFullHist' 및'ElementName = IncludeFullHist'의 IsChecked 속성에 바인딩을 시도했지만 그 중 아무 것도 수행하지 않았습니다. 내 컨트롤에 대한 datacontext 일을 엉망이야? – KyleMit

+0

@Rachel, 다시 답변 해 주셔서 감사합니다. 나는 그것을 작동 시켰어. 문제는 내 다른 해결 방법 중 하나에서 DataContext에 x : Key 특성 ('')을 부여하여 얻으려는 바보 같은 것이 었습니다. 어떻게 든 datacontext와 간섭하고있었습니다. 어느 쪽이든 솔루션은 게시 된대로 작동합니다. 감사합니다. – KyleMit

+0

다행 당신은 그것을 해결 :) – Rachel

답변

9

DataGridColumn는 ISN 비록 '는 VisualTree 실제로 일부가 아닙니다 꽤 똑같다.

그때, 바인딩을 저장하여 <DataGrid.Resources>Freezable 객체를 생성 VisibilityStaticResource 바인딩 것을 사용하는 것이 해결책을 발견했습니다 가장 가까운. 그것은 꽤 좋은 해결책은 아니지만, 현재로서는 제가 찾을 수있는 유일한 해결책입니다.

당신은 그것의 예 here

<DataGrid.Resources> 
    <local:BindingProxy x:Key="proxy" Data="{Binding IsChecked, 
     ElementName=IncludeFullHist, 
     Converter={StaticResource boolItemsConverter}}" /> 
</DataGrid.Resources> 

<DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}" 
    Visibility="{Binding Path=Data, Source={StaticResource proxy}}"/> 
관련 문제