1

これらの2つの不滅のテーブルを持つデータセットがあるとします: Employee & Order
Emp -> ID, Name
Ord -> Something, Anotherthing, EmpID
そして関係Rel : Ord (EmpID) -> Emp (ID)

標準のマスター/詳細シナリオ
(従業員の表示、関係の追跡、関連する注文の表示) では
うまく機能しますが、反対の方法 (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>

何か案は?値コンバーターを作成できますが、親モジュールから取得したデータセット インスタンスを使用したくない場合は注意が必要です。

4

3 に答える 3

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で現在選択されている行が、2つのTextBoxコントロールのバインディングソースになることを意味します。

于 2008-10-24T08:56:43.573 に答える
0

2つのTextBoxコントロールのDataContextは何ですか?
2番目のバインディングが機能するには、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>
于 2008-10-21T09:01:27.947 に答える
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; }
    }
}

次に、データ コンテキストで「OrdDataTable」オブジェクトの「EmpName」プロパティにバインドできます。

于 2008-10-16T08:43:12.823 に答える