Pregunta

Estoy creando un control de usuario para una rica TreeView (uno que tiene los menús de contexto para cambiar el nombre de los nodos, la adición de nodos secundarios, etc.).Quiero ser capaz de utilizar este control para administrar o navegar en cualquier estructuras de datos jerárquicas voy a crear.Actualmente tengo trabajo para cualquier estructura de datos que implementa la siguiente interfaz (la interfaz no necesita ser efectivamente implementadas, sin embargo, sólo la presencia de estos miembros es necesario):

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

Luego, en mi UserControl, yo uso plantillas para enlazar mi árbol a la estructura de datos, así:

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

Lo que me gustaría hacer es definir el nombre de cada uno de estos miembros en mi RichTreeView, lo que le permite adaptarse a una variedad de diferentes estructuras de datos, así:

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

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

Es allí cualquier manera de exponer la Trayectoria de un enlace dentro de un control de usuario como una propiedad pública de que UserControl?Existe alguna otra manera de ir sobre la solución de este problema?

¿Fue útil?

Solución

Tal vez esto podría ayudar a:

Crear un nuevo Enlace cuando se establece la HeaderProperty de la propiedad en el Encabezado de la propiedad de dependencia:

Encabezado de la propiedad es de su diario normal 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));

y la propiedad de su HeaderProperty funciona de la siguiente manera:

    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 es su diario normal DependencyProperty, con un método que se invoca tan pronto como el HeaderProperty cambios.Así que cuando se cambia , se crea un enlace en la Cabecera, que se unen a la ruta de acceso se establece en el HeaderProperty.:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top