0

これはおそらく奇妙な質問ですが、ここに行きます(これが悪いデータベース設計なのか、それとも私がいる奇妙な状況なのか教えてください).

データベースには、ProductGroup と Parameters という 2 つのテーブルがあります。1 つはその名前に従ってさまざまな製品グループに関する情報を含み、もう 1 つは各グループに適用できる (したがって、各グループを異なるものにする) さまざまなパラメーターに関する情報を含みます。

2 つのテーブルを関連付けるために、3 番目のテーブルが設定されています。2 つの主キー (parameterId と groupId) を持つ GroupParameters と、3 番目の列がこのグループのパラメーターの値です。

これで、各グループとそのパラメーター値に関する情報を表示する画面ができました。ユーザーはこれらの値も編集できる必要があります。したがって、私の質問は、この値 (3 番目のテーブルに格納されている) をテキスト ボックスにバインドする方法です。一般に、この状況でコントロールをバインドするにはどうすればよいでしょうか。

みんなありがとう!

編集:私が省略した重要な詳細があります。DataSetおよびDataTableオブジェクトを使用して、データベースからメモリ内データを格納し、それらをコントロールにバインドしたいと考えています。この理由は問題とは関係ありませんが、変更を追跡し、ユーザーの意志でそれらを元に戻すことができる必要があることに関係しています:(

4

2 に答える 2

0

実際、私にとって最も効果的だったのは、MultiBindingを使用することでした。私はこれに気づいていませんでした-Google検索クエリを使用して自分で学習するのは面倒です(本で学習するのは遅い場合でも).

于 2009-03-30T20:59:02.897 に答える
0

ここには本当に悪いデザインは見られません。

このための UI を、ユーザーが選択する製品グループのリスト (ProductGroups コレクションにバインドされた ListBox) として構築できます。次に、ListBox、CurrentGroupId という名前のプロパティ、およびいくつかのコントロール ボタン (「OK」など) を持つユーザー コントロールを作成できます。 」)。CurrentGroupId を ProductGroups ListBox の選択された値にバインドします。CurrentGroupId が変更されたり、Parameters コレクションが変更されたりした場合は、LINQ などを使用してこの内側の ListBox アイテムをフィルター処理する必要があります。ListBox 項目は GroupParameter-s オブジェクトである必要があります。

今(最後に:))あなたの質問への答え:リストのアイテムをデータテンプレートにして、次のようにValueプロパティにバインドされたテキストボックスを作成できます(ここで「ローカル」は名前空間です):

<DataTemplate DataType={x:Type local:GroupParameter}>
  <StackPanel Orientation="Horizontal">
    <TextBox Text="{Binding Value, Mode=TwoWay}" />
    <Button Content="OK" Click=INSERT_YOUR_OK_HANDLER_HERE />
    <Button Content="Cancel" Click=INSERT_YOUR_CANCEL_HANDLER_HERE />
  </StackPanel>
</DataTemplate>

ユーザーが新しいパラメーターを追加できるようにする必要がある場合は、現在選択されているグループ ID を持つパラメーター コレクションに新しいエントリを追加する追加機能を作成できます。その後、ユーザーはユーザー コントロールに追加されたアイテムを編集できます。

それが役に立てば幸いです。今言ったことを理解するのが難しい場合は、そのほとんどをコードで記述できると思います。ためらわずに私に尋ねてください:)

于 2009-03-23T15:40:09.023 に答える