DataGridTextColumn Liaison De Visibilité
J'essaie de lier la colonne de la visibilité à celle d'un autre élément comme ceci:
<Window x:Class="WpfApplication1.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="BooleanToVisibilityConverter" />
</Window.Resources>
<StackPanel>
<CheckBox x:Name="chkColumnVisible" Content="Show column" />
<DataGrid x:Name="MyDataGrid" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Column1" Visibility="{Binding ElementName=chkColumnVisible, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
mais j'obtiens cette erreur dans VS de sortie:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=IsChecked; DataItem=null; target element is 'DataGridTextColumn' (HashCode=48860040); target property is 'Visibility' (type 'Visibility')
Est-il un pur XAML façon d'accomplir cette?
OriginalL'auteur Eren Ersönmez | 2012-01-13
Vous devez vous connecter pour publier un commentaire.
Les colonnes d'un
DataGrid
sont abstraites des objets ne figurant pas dans le visuel ou l'arborescence logique. Vous ne pouvez pas utiliserElementName
etRelativeSource
.Source
en combinaison avecx:Référence
devrait fonctionner, cependant:Merci, ça fonctionne! Mais alors que je peux dormir :)... je peux certainement comprendre pourquoi RelativeSource ne fonctionne pas, puisque c'est par rapport à la cible. Mais ce qui sur terre est le problème avec ElementName?? Je pensais que j'étais en donnant la liaison à une source absolue en utilisant ElementName (et évidemment, je me trompe!) donc il n'a pas d'importance si la cible est sur le visuel ou la logique de l'arbre ou non.
utilise la portée de nom de résoudre le nom, et portées de nom sont à charge sur les arbres pour autant que je sais.
href="http://msdn.microsoft.com/en-us/library/system.windows.data.binding.elementname.aspx" >MSDN:
You can refer to elements in code only if they are registered to the appropriate NameScope through RegisterName. For more information, see
WPF XAML Namescopes
->The names in a XAML namescope can be used to establish relationships between the XAML-defined names of objects and their instance equivalents in an object tree.
ok, ça a du sens.
OriginalL'auteur H.B.
J'ai écrit un markupextension:
Il permet de liaison pour le DataContext de l'actuel objet racine {Fenêtre, UserControl, ...}
Exemple d'utilisation (Visible & Visibilité sont des propriétés dans le viewmodel):
BindingExpression path error: 'ValidationColumnVisibility' property not found on 'object' ''NameFixupToken' (HashCode=55620207)'. BindingExpression:Path=ValidationColumnVisibility; DataItem='NameFixupToken' (HashCode=55620207); target element is 'DataGridTextColumn' (HashCode=62066456); target property is 'Visibility' (type 'Visibility')
Travaillé perfecly avec un DataTemplateColumn et DataGrid dans mon application.
OriginalL'auteur Johan Larsson
La solution de Johan Larsson fonctionne parfaitement, que le FallbackValue à partir de la Liaison n'est pas transmis, donc je l'ai changé comme ceci:
De sorte qu'il pourrait être utilisé comme cela, ici par exemple pour la Liaison à un en-Tête:
OriginalL'auteur Apfelkuacha