2008-10-14 3 views
1

나는 그 두 불멸의 테이블 데이터 세트가 있다고 가정 : 직원 & 주문을
EMP를 -> ID, 이름
오드 -> 뭔가, Anotherthing,다는 EmpID
그리고 관계 REL : 오드 (다는 EmpID) -> EMP를 (ID)는
xaml 바인딩에서 dataset parent 릴레이션을 추적 할 수있는 방법이 있습니까?

그것은 표준 마스터/세부에서 잘 작동 시나리오
(쇼 직원, 관계, 공연 관련 명령 아래에 따라),
하지만 난에 wan't 반대 방향으로 이동하십시오 (Emp.Name으로 Ord 테이블을 보여주십시오)? 이 같은

뭔가 :

<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> 

어떤 아이디어? 값 변환기를 만들 수 있지만, 부모 모듈에서 얻은 데이터 셋 인스턴스를 사용하지 않으면 문제가 발생합니다.

답변

1

여러 컨트롤의 내용을 동기화 할 경우, 당신이 그 (것)들을 공통의 부모 컨트롤에 의 DataContext 설정을 통해 같은 바인딩 소스를 공유가 필요합니다. 다음은 예입니다 자동으로 CollectionView.CurrentItem 바인딩 소스의와 동기화 할 ListBox.SelectedItem에게 재산의 원인이됩니다 '사실'에 IsSynchronizedWithCurrentItem 속성을 설정

<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> 

, 그것은이다 DataContext에 설정된 행 모음입니다. 즉, ListBox의 현재 선택된 행이 두 TextBox 컨트롤의 바인딩 소스가됩니다.

0

강력한 형식의 데이터 집합을 사용한다고 가정하고 TextBox를 'EmpRow.Name'속성에 바인딩하려면 'OrdDataTable'클래스의 속성으로 해당 속성을 노출해야합니다.

using System.Data; 

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

는 그런 다음 'EmpName'에 결합 할 수있을 것입니다 : 비주얼 스튜디오는 부분 클래스로 형식화 된 데이터 집합 코드를 생성하기 때문에

, 당신은 'OrdDataTable'클래스에 이런 식으로 속성을 추가 할 수 있습니다 데이터 컨텍스트의 'OrdDataTable'개체의 속성.

0

두 TextBox 컨트롤의 DataContext는 무엇입니까?
두 번째 바인딩이 작동하려면 DataContext을 'USERSDataTable'의 인스턴스로 설정해야합니다. 이러한 배열은 DataSet의 배열에 포함되어 있으므로 바인딩 할 테이블을 명시해야합니다. 같은 뭔가 :

<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> 
관련 문제