Frage

Ich erstelle ein Benutzersteuerelement für eine reiche TreeView (ein Kontext-Menüs für den Knoten umbenennen, hinzufügen von untergeordneten Knoten, etc.).Ich möchte in der Lage sein zu verwenden Sie dieses Steuerelement zu verwalten, oder navigieren Sie beliebige hierarchische Datenstrukturen ich werde zu schaffen.Ich habe momentan die es funktioniert für jede Datenstruktur, die implementiert die folgende Schnittstelle (die Schnittstelle müssen nicht tatsächlich umgesetzt werden, jedoch, nur die Anwesenheit der Mitglieder erforderlich ist):

interface ITreeItem
{
    string Header { get; set; }
    IEnumerable Children { get; }
}

Dann in meinem Benutzersteuerelement verwende ich Vorlagen zum binden mein Baum, um die Datenstruktur, etwa so:

<TextBlock x:Name="HeaderTextBlock" Text="{Binding Path=Header}" />

Was ich tun möchte, ist, definieren Sie den Namen jedes dieser Mitglieder in meiner RichTreeView, so dass Sie zu anzupassen zu verschiedenen Datenstrukturen, wie so:

class MyItem
{
    string Name { get; set; }
    ObservableCollection<MyItem> Items;
}

<uc:RichTreeView ItemSource={Binding Source={StaticResource MyItemsProvider}} 
    HeaderProperty="Name" ChildrenProperty="Items" />

Gibt es eine Möglichkeit, setzen Sie den Pfad ein verbindliches innen ein UserControl als öffentlicher Eigenschaft des UserControl?Gibt es eine andere Möglichkeit, darüber zu gehen, dieses problem zu lösen?

War es hilfreich?

Lösung

Vielleicht könnte dies helfen:

Erstellen Sie eine neue Bindung, wenn Sie die HeaderProperty Eigentum auf den Header Abhängigkeit Eigenschaft:

Header-Eigenschaft ist Ihre normalen täglichen DependencyProperty:

    public string Header
    {
        get { return (string)GetValue(HeaderProperty); }
        set { SetValue(HeaderProperty, value); }
    }

    public static readonly DependencyProperty HeaderProperty =
        DependencyProperty.Register("Header", typeof(string), typeof(ownerclass));

und die Eigenschaft Ihrer HeaderProperty funktioniert wie folgt:

    public static readonly DependencyProperty HeaderPropertyProperty =
        DependencyProperty.Register("HeaderProperty", typeof(string), typeof(ownerclass), new PropertyMetadata(OnHeaderPropertyChanged));

    public string HeaderProperty        
    {
        get { return (string)GetValue(HeaderPropertyProperty); }
        set { SetValue(HeaderPropertyProperty, value); }
    }

   public static void OnHeaderPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        if (args.NewValue != null)
        {
            ownerclass c = (ownerclass) obj;

            Binding b = new Binding();
            b.Path = new PropertyPath(args.NewValue.ToString());
            c.SetBinding(ownerclass.HeaderProperty, b);
        }
    }

HeaderProperty ist Ihre normalen täglichen DependencyProperty, mit einer Methode, die aufgerufen wird, sobald die HeaderProperty änderungen.Also, wenn es sich verändert , es wird eine Bindung auf der Kopfzeile die Bindung an die Weg, die Sie in den HeaderProperty.:)

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