Joseph Sturtevant
그는 물었다 12년 전
5

Wpf 에서 바인딩 가변적입니다

난 우저콘트럴 만들기 위한 트리비에프 부유하도다 (컨텍스트 메뉴를 사용할 수 있는 하나의 이름 변경, 추가 자식 노드는 노드, etc.). I want to be 이 컨트롤을 사용할 수 있는 모든 관리 또는 실행하십시오 계층적이지 데이터 구조를 만들 수 있을 거예요. 현재 할꺼이나 내가 일하는 모든 데이터 구조를 구현하는 같은 인터페이스 (interface 필요는 없습니다 다만, 실제로 이러한 멤버 구현될 존재를 필수):

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

그럼 내, 내가 사용하는 데이터 구조, 마치 내 진단트리는 바인딩하도록 템플릿일 우저콘트럴 수 있습니다.

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

내가 해야 할 것은 이러한 각 멤버가 될 수 있다는 내 이름 정의하십시오 리히트리비에프 적응합니다 등 다양한 데이터 구조, 있습니다.

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

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

그 길은 내 길이 유지됩니까 노출시킵니다 구속력 있는 우저콘트럴 로 공물 iqn 우저콘트럴? 이 문제를 해결하는 대한 몇 가지 다른 길을 갈 있나요?

답변 1 개

아마도 이 도움이 됩니다.

새로운 것을 만들 수 있는 헤더입니다 상관 바인딩하면 헤더프로페티 설정할 때 속성 속성:

시 일반 헤더입니다 속성은 일상적인 데펜덴시프로페티:

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

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

등록 및 너회의 헤더프로페티 다음과 같이 작동합니다.

    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);
        }
    }

일상적인 데펜덴시프로페티 헤더프로페티 즉시 해결할 수 있으며, 일반 메서드입니다 함께 호출되는 헤더프로페티 변경. It 변경 사항을 외면하였나니 e-lab 은 제목을 바인딩하면 되는 길을 바인딩하지 헤더프로페티 에서 설정할 수 있습니다. )