문제

풍부한 TreeView(노드 이름 바꾸기, 하위 노드 추가 등을 위한 상황에 맞는 메뉴가 있는 것)에 대한 UserControl을 만들고 있습니다.나는 이 컨트롤을 사용하여 내가 만들 계층적 데이터 구조를 관리하거나 탐색할 수 있기를 원합니다.현재 다음 인터페이스를 구현하는 모든 데이터 구조에 대해 작업하고 있습니다(인터페이스는 실제로 구현될 필요는 없지만 이러한 멤버만 있으면 됩니다).

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

그런 다음 UserControl에서 템플릿을 사용하여 다음과 같이 트리를 데이터 구조에 바인딩합니다.

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

제가 하고 싶은 일은 RichTreeView에서 이러한 각 멤버의 이름을 정의하여 다음과 같이 다양한 데이터 구조에 적응할 수 있도록 하는 것입니다.

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

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

UserControl 내부의 바인딩 경로를 해당 UserControl의 공용 속성으로 노출할 수 있는 방법이 있습니까?이 문제를 해결하는 다른 방법이 있습니까?

도움이 되었습니까?

해결책

아마도 이것이 도움이 될 수 있습니다:

헤더 종속성 속성에 HeaderProperty 속성을 설정할 때 새 바인딩을 만듭니다.

헤더 속성은 일반적인 일상적인 종속성 속성입니다.

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

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

HeaderProperty의 속성은 다음과 같이 작동합니다.

    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는 HeaderProperty가 변경되자마자 호출되는 메서드가 포함된 일반적인 일상적인 종속성 속성입니다.따라서 변경되면 HeaderProperty에 설정한 경로에 바인딩될 헤더에 바인딩이 생성됩니다.:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top