I have the following sample WPF program:
Xaml:
<Window x:Class="AncestorArie.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <BooleanToVisibilityConverter x:Key="BoolToVis" /> </Window.Resources> <Grid> <DataGrid AutoGenerateColumns="False" Name="Blumen" ItemsSource="{Binding Leaves}"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Color}" Header="Farbe" Width="160" /> <DataGridTextColumn Binding="{Binding Size}" Header="Größe" Width="60" Visibility="{Binding Path=DataContext.Flag, RelativeSource={RelativeSource Findancestor, AncestorType={x:Type Window}}, Converter={StaticResource BoolToVis}}" /> </DataGrid.Columns> </DataGrid> </Grid> </Window>
Code behind:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Flowers rose = new Flowers(); rose.Leaves = new ObservableCollection<Leaf>(); rose.Flag = false; Leaf L1 = new Leaf(); L1.Color = "rot"; L1.Size = 3; rose.Leaves.Add(L1); Leaf L2 = new Leaf(); L2.Color = "gelb"; L2.Size = 2; rose.Leaves.Add(L2); this.DataContext = rose; } }
And model classes:
public class Leaf { public string Color { get; set; } public int Size { get; set; } } public class Flowers { public bool Flag { get; set; } public ObservableCollection<Leaf> Leaves { get; set; } }
As you can see, I want to hide the second column of the datagrid if the Flag property is set to false. But that will not work. I get the following binding error in the Visual Studio output window:
Error System.Windows.Data: 4: Cannot find source for binding with link 'RelativeSource FindAncestor, AncestorType =' System.Windows.Window ', AncestorLevel =' 1 ''. BindingExpression: Path = DataContext.Flag; DataItem = NULL; target element "DataGridTextColumn" (HashCode = 44856655); target property "Visibility" (type "Visibility")
What is wrong with my code regarding the Visibility attribute?
c # data-binding wpf xaml datagrid
Hulda Jul 28 '11 at 10:52 2011-07-28 10:52
source share