1
A
回答
4
这一个是有点棘手。问题来自DataGrid.Columns只是一个属性而不是可视化树的一部分。这意味着像ElementName或RelativeSource这样的常规绑定工具将不起作用。但是,如果您覆盖DataGrid.DataContext属性的元数据,则可以使其正常工作。下面的示例代码:
<Window x:Class="DataGridColumnVisibilitySample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tk="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
xmlns:l="clr-namespace:DataGridColumnVisibilitySample"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<l:VisibilityConverter x:Key="VisibilityC" />
</Window.Resources>
<DockPanel LastChildFill="True">
<CheckBox DockPanel.Dock="Top" Margin="8" Content="Show Column B" IsChecked="{Binding ShowColumnB}" />
<tk:DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False" CanUserAddRows="False">
<tk:DataGrid.Columns>
<tk:DataGridTextColumn Header="Column A" Binding="{Binding ColumnA}" />
<tk:DataGridTextColumn Header="Column B" Binding="{Binding ColumnB}"
Visibility="{Binding (FrameworkElement.DataContext).ShowColumnB,
RelativeSource={x:Static RelativeSource.Self},
Converter={StaticResource VisibilityC}}" />
<tk:DataGridTextColumn Header="Column C" Binding="{Binding ColumnC}" />
</tk:DataGrid.Columns>
</tk:DataGrid>
</DockPanel>
</Window>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Windows;
using System.Windows.Data;
using Microsoft.Windows.Controls;
namespace DataGridColumnVisibilitySample
{
public partial class Window1 : INotifyPropertyChanged
{
public Window1()
{
InitializeComponent();
new DataGridContextHelper(); // Initialize Helper
Items = Enumerable.Range(1, 3).Select(i => new MyItem {ColumnA = "A" + i, ColumnB = "B" + i, ColumnC = "C" + i}).ToList();
DataContext = this;
}
public List<MyItem> Items { get; private set; }
private bool mShowColumnB;
public bool ShowColumnB
{
get { return mShowColumnB; }
set
{
if (mShowColumnB == value) return;
mShowColumnB = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("ShowColumnB"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
public class DataGridContextHelper
{
static DataGridContextHelper()
{
FrameworkElement.DataContextProperty.OverrideMetadata(typeof(DataGrid),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits, OnDataContextChanged));
}
public static void OnDataContextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var grid = d as DataGrid;
if (grid == null) return;
foreach (var col in grid.Columns)
col.SetValue(FrameworkElement.DataContextProperty, e.NewValue);
}
}
[ValueConversion(typeof(bool), typeof(Visibility))]
public class VisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool && (bool)value)
return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class MyItem
{
public string ColumnA { get; set; }
public string ColumnB { get; set; }
public string ColumnC { get; set; }
}
}
我创造我的解决方案来源this post by Jaime Rodriguez。
1
只要您的数据网格位于窗口,控件等中,只要它在控件模板中,这仍然不起作用
相关问题
- 1. WPF工具提示可见性
- 2. WPF ContentPresenter未能绑定可见性
- 3. Wpf绑定到WindowsFormHost的可见性
- 4. WPF通过绑定设置可见性
- 5. WPF - 如何默认数据绑定文本块的可见性?
- 6. wpf数据绑定网格行可见性
- 7. MVVM绑定DataGrid(WPF工具包)到DataTable
- 8. WPF工具包图表控件绑定
- 9. 绑定集合WPF工具包图表
- 10. AjaxControl工具包TabContainer可见性问题
- 11. 数据绑定与MVVM光工具包
- 12. knockoutjs - 数据绑定可见
- 13. WPF数据绑定性能
- 14. WPF在绑定数据包含列表时绑定GridView
- 15. 如何绑定到数据上下文WPF工具包数据网格
- 16. 数据绑定WPF工具包数据网格,以LINQ到SQL查询
- 17. wpf工具包datagrid性能
- 18. WPF工具包 - 代码背后的绑定行系列
- 19. WPF工具提示绑定
- 20. Silverlight DataGridTextColumn绑定可见性
- 21. 绑定DataGridTemplateColumn可见性
- 22. Silverlight ListboxItem可见性绑定
- 23. 以编程方式获取WPF装饰者可见性数据绑定
- 24. WPF将数据绑定到组合框并切换其可见性
- 25. 将XAML中的可见性绑定到可见性属性
- 26. wpf工具包数据网格
- 27. WPF C#数据绑定列表定稿
- 28. 如何让绑定到数据集时显示新行的wpf工具包datagrid
- 29. Android数据绑定和包含的布局不会更新可见性
- 30. 向WPF控件添加条件可见性工具提示