XAML 바인딩에서 데이터 세트 부모 관계를 추적 할 방법이 실제로 없습니까?

StackOverflow https://stackoverflow.com/questions/202990

문제

두 개의 불멸 테이블이있는 데이터 세트가 있다고 가정 해
emp -> ID, 이름
주문 -> 무언가, 또 다른 모든 것을, empid
그리고 관계 rel: ord (empid) -> emp (id)

표준 마스터/세부 시나리오에서 훌륭하게 작동합니다
(직원들을 보여주고, 관계를 따르고, 관련 명령을 보여줍니다),
그러나 내가 반대 방향으로 가지 않아야 할 때

이 같은:

<stackpanel>   // with datacontext set from code to dataset.tables["ord"]
   <TextBox Text="{Binding Something}"/>
   <TextBox Text="{Binding Anotherthing}"/>
   <TextBox Text="{Binding ???}"/> // that's my problem, how to show related Emp.Name 
</stackpanel>

어떤 아이디어? 값 변환기를 만들 수 있지만 부모 모듈에서 얻은 데이터 세트 인스턴스를 사용하지 않으면 까다로워집니다.

도움이 되었습니까?

해결책

여러 컨트롤의 내용을 동기화하려면 동일한 바인딩 소스를 DataContext 공통 상위 제어를 설정합니다. 예는 다음과 같습니다.

<StackPanel>
    <StackPanel.Resources>
        <ObjectDataProvider x:Key="ds" ObjectType="{x:Type mynamespace:MyDataSet}" />
    </StackPanel.Resources>

    <!-- We set the data context to the collection of rows in the table -->
    <StackPanel DataContext="{Binding Source={StaticResource ds}, Path=USERS.Rows}">
        <ListBox ItemsSource="{Binding}"
                 DisplayMemberPath="NAME"
                 IsSynchronizedWithCurrentItem="True" />
        <TextBox Text="{Binding Path=NAME}"/>
        <TextBox Text="{Binding Path=COUNTRIESRow.NAME}"/>
    </StackPanel>
</StackPanel>

설정 issynchronized withCurrentEM 'true'로가는 속성은 ListBox.SelectedItem 자동으로 동기화 할 속성 CollectionView.CurrentItem 바인딩 소스의 DataContext. 이는 ListBox에서 현재 선택된 행이 두 텍스트 상자 컨트롤의 바인딩 소스가된다는 것을 의미합니다.

다른 팁

텍스트 상자를 'emprow.name'속성에 바인딩하기 위해 강하게 유형 된 데이터 세트를 사용하고 있다고 가정하면 'OrdDatatable'클래스에 속성으로 노출해야 할 것입니다.

Visual Studio는 부분 클래스로 유형 된 데이터 세트 코드를 생성하므로 다음과 같은 방식으로 'OrdDatatable'클래스에 속성을 추가 할 수 있습니다.

using System.Data;

public partial class OrdDataTable : DataTable
{
    public string EmpName
    {
        get { return this.EmpRow.Name; }
    }
}

그런 다음 데이터 컨텍스트에서 'ordDatatable'객체의 'Empname'속성에 바인딩 할 수 있습니다.

두 텍스트 박스 컨트롤의 데이터 콘텍스트는 무엇입니까?
두 번째 바인딩이 작동합니다 DataContext '사용자 구분 가능'인스턴스로 설정해야합니다. 이것들은 데이터 세트의 배열에 포함되므로 어떤 테이블을 바인딩 할 것인지 명시 적으로 알려야합니다. 같은 것 :

<StackPanel>
    <StackPanel.Resources>
        <ObjectDataProvider x:Key="ds" ObjectType="{x:Type mynamespace:MyDataSet}" />
    </StackPanel.Resources>

    <!-- Notice we set the data context to the first item in the array of tables -->
    <StackPanel DataContext="{Binding Source={StaticResource ds}, Path=USERS[0]}">
        <TextBox Text="{Binding NAME}"/>
        <TextBox Text="{Binding COUNTRIESRow.NAME}"/>
    </StackPanel>
</StackPanel>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top