c# - 在 WPF 中绑定祖先元素
问题描述
我正在努力通过将 Visibility 属性绑定到 viewModel 的属性来隐藏 Datagrid 的列。ItemsSource 工作正常,我在网格中有很多行,Datacontext 设置正确。你能帮我解决我做错了什么吗?谢谢
<StackPanel>
<DataGrid ItemsSource="{Binding SortedPlanning}" IsReadOnly="True" AutoGenerateColumns="False" CanUserResizeRows="False">
<DataGrid.Columns >
<DataGridTextColumn Header ="NNI" Binding="{Binding SortedPlanning.Nni}" Width="80" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}, Path=ColumnVisibility}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header ="Nom" Binding="{Binding LastName}" Width="120" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=ColumnVisibility}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header ="Prénom" Binding="{Binding FirstName}" Width="80" Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ColumnVisibility}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGridTextColumn>
<DataGridTextColumn Header ="Campagne" Binding="{Binding Campaign}" Width="120">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid>
</StackPanel>
查看型号:
public interface IPlanningViewModel : IDisposable
{
ObservableCollection<PlanningEntry> SortedPlanning { get; }
Visibility ColumnVisibility { get; }
bool FilterGrid { get; set; }
DateTime FromDate { get; set; }
DateTime ToDate { get; set; }
}
我希望列“NNI”、“Nom”和“Prénom”绑定到 VM 的 ColumnVisibility,但它不会发生。
解决方案
You will have use below syntax.
It should resolve your issue.
<DataGridTextColumn Visibility="{Binding Path=DataContext.ColumnVisibility, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
推荐阅读
- freeradius - 重置 daloradius 密码
- bash - 仅打印字符串中的前三个数字
- python - BMI与异常处理python
- youtube-api - 如何使用 Youtube API 从提要中删除视频?
- laravel - Laravel 资源条件返回
- python - Pytorch LSTM 每个 epoch 从 0 精度开始
- arrays - Kotlin 中的可比数组
- vba - 将多个工作表中的单行复制到新工作表中
- reactjs - 在 material-ui 中预览从库中选择的图像以进行反应
- javascript - 如何使用 html 按钮创建动态 socket.join(socket.room)