Variații variabile în WPF

Cream un UserControl pentru un TreeView bogat (unul care are meniuri contextuale pentru redenumirea nodurilor, adăugarea nodurilor copil, etc.). Vreau să pot utiliza acest control pentru a gestiona sau a naviga în orice structură de date ierarhică pe care o voi crea. În prezent, am lucrat pentru orice structură de date care implementează următoarea interfață (interfața nu trebuie implementată, totuși este necesară numai prezența acestor membri):

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

Apoi, în UserControl, folosesc șabloane pentru a lega arborele meu de structura de date, cum ar fi:


Ceea ce aș vrea să fac este să definim numele fiecăruia dintre acești membri în RichTreeView, permițându-i să se adapteze la o serie de structuri de date diferite, cum ar fi:

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


Există vreo modalitate de a expune Calea legării în interiorul unui UserControl ca proprietate publică a UserControl? Există altă cale de a rezolva această problemă?

0
fr hi bn

1 răspunsuri

Poate că acest lucru ar putea ajuta:

Creați o nouă obligație când setați proprietatea HeaderProperty pe proprietatea de dependență Header:

Proprietatea Header este proprietatea obișnuită de dependență de zi cu zi:

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

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

și proprietatea HeaderProperty funcționează după cum urmează:

    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 este proprietatea obișnuită de dependență de zi cu zi, cu o metodă invocată imediat ce se schimbă HeaderProperty. Deci, atunci când se schimbă, creează o legare pe Antet care se va lega de calea setată în HeaderProperty. :)

0
adăugat