2008-10-14 20 views
1

假設我的那兩個神仙表的數據集:員工&訂購
的Emp - > ID,名稱
奧德 - >東西,Anotherthing,的EmpID
與關係相對:奧德(的EmpID) - >的Emp(ID)
在xaml綁定中真的沒有辦法跟蹤數據集父關係嗎?

它工作在標準主/從大的場景
(秀的員工,跟着下來的關係,顯示相關訂單),
但什麼時候我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集相同的結合源的共同父控件。下面是一個例子:

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

設置IsSynchronizedWithCurrentItem屬性爲「True」將導致ListBox.SelectedItem屬性與CollectionView.CurrentItem綁定源的自動同步,即行集合設置在DataContext。這意味着ListBox中當前選定的行成爲兩個TextBox控件的綁定源。

0

假設您使用強類型DataSet,爲了將TextBox綁定到'EmpRow.Name'屬性,您可能必須將其作爲'OrdDataTable'類中的屬性公開。

由於Visual Studio生成與部分類的類型化的DataSet的代碼,你可以在屬性添加到「OrdDataTable」級是這樣的:

using System.Data; 

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

然後你就可以綁定到「EmpName」數據上下文中'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> 
相關問題