데이터그램 열 가시성 MVVM 바인딩
.Net 3.5
컬럼이 데이터콘텍스트를 상속하지 않는다는 것을 알고 있으며, 다른 투고를 읽음으로써 이것이 효과가 있을 것이라고 생각했습니다.
Visibility="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(FrameworkElement.DataContext).IsColumnNameVisible,
Converter={StaticResource boolToVisConverter}}"
하지만 물론 그렇지 않습니다.출력창은 불평하지 않습니다.찾은 리소스는 뷰모델 속성보다 새로운 것 같습니다.
DG 전체를 다음에 나타냅니다.
<tk:DataGrid
VirtualizingStackPanel.IsVirtualizing="False"
Grid.Column="0"
AlternationCount="2"
AreRowDetailsFrozen="True"
AutoGenerateColumns="False"
Background="Transparent"
BorderThickness="0"
CanUserAddRows="False"
CanUserReorderColumns="True"
CanUserResizeRows="False"
GridLinesVisibility="None"
ItemsSource="{Binding Employees}"
SelectionMode="Single"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
RowHeaderStyle="{StaticResource rowHeaderStyle}"
CellStyle="{StaticResource cellStyle}"
RowStyle="{StaticResource rowStyle}"
ContextMenu="{StaticResource columnHeaderContextMenu}">
<tk:DataGrid.Resources>
<ContextMenu x:Key="columnHeaderContextMenu" ItemsSource="{Binding ColumnHeaderContextMenuItems}" />
<Style TargetType="{x:Type ScrollBar}">
<Setter Property="Background" Value="Transparent"/>
</Style>
<Style TargetType="{x:Type tk:DataGridColumnHeader}">
<Setter Property="Background" Value="Transparent"/>
</Style>
</tk:DataGrid.Resources>
<tk:DataGrid.Triggers>
<EventTrigger RoutedEvent="tk:DataGridRow.MouseDoubleClick">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource showDetailGrid}"/>
</EventTrigger.Actions>
</EventTrigger>
</tk:DataGrid.Triggers>
<tk:DataGrid.Columns>
<tk:DataGridTextColumn IsReadOnly="True" Header="test" Binding="{Binding Name, Mode=OneWay}" Visibility="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(FrameworkElement.DataContext).IsColumnNameVisible, Converter={StaticResource boolToVisConverter}}" />
</tk:DataGrid.Columns>
</tk:DataGrid>
저는 이 문제에 대한 해결책을 거의 다 읽었지만 아무 것도 효과가 없습니다.
DataGridColumn
는 시각적인 트리의 일부가 아니기 때문에 데이터 컨텍스트에 접속되어 있지 않습니다.DataGrid
.
서로 연결하려면 프록시 요소 접근 방식을 사용합니다.
프록시 추가
FrameworkElement
조상 패널의Resources
.보이지 않는 상태로 호스트합니다.
ContentControl
그것에 얽매이다Content
.이것을 사용하다
ProxyElement
~하듯이StaticResource
가시성 바인딩에 있는 데이터 컨텍스트 소스에 대해 설명합니다.<StackPanel> <StackPanel.Resources> <local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> <FrameworkElement x:Key="ProxyElement" DataContext="{Binding}"/> </StackPanel.Resources> <ContentControl Visibility="Collapsed" Content="{StaticResource ProxyElement}"/> <DataGrid AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Visibility="{Binding DataContext.IsTextColumnVisibile, Source={StaticResource ProxyElement}, Converter={StaticResource BooleanToVisibilityConverter}}" Binding="{Binding Text}"/> </DataGrid.Columns> </DataGrid> </StackPanel>
이외에는DataGridColumn
위의 접근방식은 접속에도 매우 효과적입니다.DataContext
로.Popup
및ContextMenu
s(즉, 시각적 트리에 연결되지 않은 요소)
Silverlight 사용자
안타깝게도 프레임워크 요소를 사용하여 콘텐츠 제어 내용을 설정할 수 없습니다.회피책은 다음과 같습니다(이것은 Silverlight의 가이던스 코드일 뿐입니다).
프레임워크 요소 리소스를 다음과 같은 경량 리소스로 변경합니다.
Textblock
(Silverlight 에서는, 다음의 스태틱 자원을 지정할 수 없습니다.FrameworkElement
를 입력합니다).<StackPanel.Resources> <TextBlock x:Key="MyTextBlock" />
첨부된 속성을 작성하여 텍스트 블록을 콘텐츠컨트롤에 고정합니다.
<ContentControl Visibility="Collapsed" local:MyAttachedBehavior.ProxyElement="{StaticResource MyTextBlock}" />
연결된 종속성 속성 변경 이벤트 핸들러에서 컨텐츠 제어의 데이터 컨텍스트를 텍스트 블록으로 바인드합니다.
private static void OnProxyElementPropertyChanged( DependencyObject depObj, DependencyPropertyChangedEventArgs e) { if (depObj is ContentControl && e.NewValue is TextBlock) { var binding = new Binding("DataContext"); binding.Source = depObj; binding.Mode = OneWay; BindingOperations.SetBinding( (TextBlock)e.NewValue, TextBlock.DataContextProperty, binding); } }
따라서 텍스트 블록이 비주얼 트리에 연결되지 않을 수 있지만 데이터 컨텍스트 변경에 유의할 수 있습니다.
언급URL : https://stackoverflow.com/questions/7711275/bind-datagrid-column-visibility-mvvm
'programing' 카테고리의 다른 글
코드 배후에 있는 콜명령어 (0) | 2023.04.17 |
---|---|
xlwings 및 python을 사용하여 워크시트 복사 (0) | 2023.04.17 |
C#에서 Excel 워크북을 만들 때 클래스가 등록되지 않음 오류 발생 (0) | 2023.04.17 |
WPF 명령줄 (0) | 2023.04.17 |
커밋 메시지 내 GitHub의 이슈 번호 링크 (0) | 2023.04.17 |