Frage

Ich bin versucht, zu erstellen eine AttachedProperty für eine DataGridColumn in Silverlight 3.0 und ich habe einige Probleme.

Hier ist die 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);
    }

}

Wie Sie sehen können ist es wirklich einfach, ich versuche zur überwindung der Einschränkung, dass die Header-Eigenschaft in der DataGridColumn-Klasse kann nicht gebunden werden.

Dieser XAML-Code wie erwartet funktioniert...

<Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
                         HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"

                         Behaviors:DataGridColumnHelper.Header="User Name"/>

Aber dieser XAML-Code wirft einen Fehler...(Speziell:{System.Windows.Markup.XamlParseException:AG_E_PARSER_PROPERTY_NOT_FOUND [Line:224 Position:112] System.Windows.Anwendung.LoadComponent(Object component, Uri resourceLocator) ....})

<Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
                         HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"

                         Behaviors:DataGridColumnHelper.Header="{Binding Resources.UserNameListViewHeading, Source={StaticResource Labels}}"/>

Nur für Experimente, befestigte ich diese Eigenschaft (mit der binding-syntax) zu einem DataGrid und aktiviert die DataGridColumnHelper.Header Eigenschaft in der OnHeaderPropertyChanged Methode und den Wert korrekt war (und eine exception nicht geworfen)

Es ist mein Verständnis, dass das Objekt, das die AttachedProperty befestigt ist, muss ein DependencyProperty.Blick durch Reflektor, DataGridColumn (aus dem DataGridTextColumn ableitet) leitet sich aus DependencyProperty.

Kann jemand bitte etwas Licht in diese Schuppen?Ich bin versucht zu Lokalisieren, unsere Anwendung, und ich habe Probleme mit dem DataGrid.Ich bin sicher, dass ich dies in code-behind, aber ich versuche zu vermeiden, dass.

War es hilfreich?

Lösung

Chris, ist das problem sehr einfach, das funktioniert nicht, weil die DataGridTextColumn ist "losgelöst" von der Visual Tree.Ihre DataGridTextColumn Objekt ist verwurzelt in der Columns-Auflistung des DataGrid - siehe die Umleitung.So auch angefügte Eigenschaften, die nicht so funktionieren wie Sie es erwarten.Jetzt gibt es einen Weg, um all diese Arbeit mit etwas, ich rufe Befestigt Bindungen finden Sie unter:

http://www.orktane.com/Blog/post/2009/09/29/Introducing-nRouteToolkit-for-Silverlight-(Teil I).aspx

Eben sich erinnern Sie zu befestigen Sie die Bindung Eigenschaften mit etwas, das in den VisualTree (also das Raster halten der Spalte Sache gut machen würde.)

Hoffe, das hilft.

Andere Tipps

Versuchen Sie es mit dieser, im vorausgesetzt Benutzername ist eine Eigenschaft in Ihrem viewmodel

    <Controls:DataGridTextColumn Binding="{Binding OwnerName}"                                                                         
HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
Behaviors:DataGridColumnHelper.Header="{Binding UserName}"/>

Ich kann nicht testen, Ihr Szenario so mein Beitrag ist nur eine Idee.Könnte funktionieren, vielleicht auch nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top