Je tente de créer un AttachedProperty
pour un DataGridColumn
dans Silverlight 3.0 et j'ai quelques problèmes.Silverlight DataGridColumn AttachedProperties
Voici le AttachedProperty:
public class DataGridColumnHelper
{
public static readonly DependencyProperty HeaderProperty =
DependencyProperty.RegisterAttached("Header", typeof(string), typeof(DataGridColumnHelper),
new PropertyMetadata(OnHeaderPropertyChanged));
private static void OnHeaderPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
string header = GetHeader(d);
var dataGridColumn = d as DataGridColumn;
if (dataGridColumn == null)
{
return;
}
dataGridColumn.Header = GetHeader(dataGridColumn);
}
public static string GetHeader(DependencyObject obj)
{
return (string)obj.GetValue(HeaderProperty);
}
public static void SetHeader(DependencyObject obj, string value)
{
obj.SetValue(HeaderProperty, value);
}
}
Comme vous pouvez le voir est très simple, je tente de surmonter la limitation que la propriété en-tête dans la classe DataGridColumn ne peut pas être lié.
Ce XAML fonctionne comme prévu ...
<Controls:DataGridTextColumn Binding="{Binding OwnerName}"
HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
Behaviors:DataGridColumnHelper.Header="User Name"/>
Cependant, cette XAML renvoie une erreur ... (Plus précisément: {System.Windows.Markup.XamlParseException: AG_E_PARSER_PROPERTY_NOT_FOUND [Ligne: 224 Position: 112] à System.Windows.Application.LoadComponent (composant Object, Uri resourceLocator) ....})
<Controls:DataGridTextColumn Binding="{Binding OwnerName}"
HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
Behaviors:DataGridColumnHelper.Header="{Binding Resources.UserNameListViewHeading, Source={StaticResource Labels}}"/>
Juste pour l'expérimentation que j'attachais cette propriété (avec la syntaxe de liaison ci-dessus) à un DataGrid
et vérifié la propriété DataGridColumnHelper.Header
dans la méthode OnHeaderPropertyChanged
et la valeur était correcte (et une exception n'a pas été moulinée)
Je crois comprendre que l'objet que le AttachedProperty est attaché à doit être un DependencyProperty
. En regardant à travers le réflecteur, DataGridColumn
(dont dérive DataGridTextColumn
) dérive de DependencyProperty
.
Quelqu'un peut-il faire la lumière sur ce sujet? J'essaie de localiser notre application, et j'ai des problèmes avec le DataGrid. Je suis sûr que je peux le faire en code-behind, mais j'essaie d'éviter cela.
J'ai suivi vos messages sur la boîte à outils nRoute, et j'ai hâte de l'expérimenter. Merci pour la réponse descriptive. –
Qu'en est-il de Run in Silverlight? La propriété attachée avec la liaison sur Exécuter ne fonctionne pas dans SIlverlight ... –