0

私はWPFが初めてです。

カテゴリ、タイプの 2 つの列を持つデータベース テーブルがあります。主キーの組み合わせは (Category, Type) です。Type は Category の下位にあり、複数の Type を含む 1 つの Category を意味します。

今、私の WPF UI には、2 つのコンボボックス コントロールがあります。DB テーブルの個別カテゴリ リストへの最初のバインド。コントロールをdistinct(Category)のDBビューにバインドすることでそれを行いました。2 つ目は、最初のコントロールで現在選択されているカテゴリに属する​​タイプ リストを表示する必要があります。

調べてみましたが、簡単にできる方法がわかりません。指定されたカテゴリに基づいて必要な Type 値リストを選択するストアド プロシージャを作成しようとしましたが、選択したカテゴリを XAML のストアド プロシージャに渡す方法がわかりません。それを行うには、XAML ではなくコードを使用する必要がありますか? あなたの提案は何ですか?

どうもありがとう

4

2 に答える 2

2

そのカテゴリで可能な各タイプを含むカテゴリを保持するオブジェクトを作成します。何かのようなもの...

public class Category
{
    public ObservableCollection<string> Types { get; set; }
}

次に、すべてのカテゴリを初期化するときに、許可されるタイプを設定できます...

public class MyClass
{
    public ObservableCollection<Category> Categories { get; set; }
    public MyClass()
    {
         InitializeComponent();
         ObservableCollection MyTypes = new ObservableCollection();
         MyTypes.Add("type1");
         MyTypes.Add("type2");
         MyTypes.Add("Type3");
         Categories.Add(new Category() { Types = MyTypes });
         //Probably a more elegant way to do this, but hard to say based on information given

         this.DataContext = this;
    }
}

最後に、最初のコンボボックスをカテゴリリストにバインドし、2番目のコンボボックスを他のコンボボックスの選択したアイテムのタイプリストにバインドできます。

<ComboBox Name="cboCategory" ItemsSource = "{Binding Categories}" />

<ComboBox ItemsSource = "{Binding ElementName=cboCategory, Path=SelectedItem.Types}" />
于 2012-06-04T14:07:49.647 に答える
0

通常、この種のデータを表示するときは常に、最初にデータをフェッチしてから、必要なオブジェクトを準備し、それをバインドした後、wpfコントロールを使用します。

これで、最初にコンボボックスにバインドしたので、selecteditemに基づいて、他のドロップダウンリストに入力し、最初のSelectionChangedまたはCategoryListでバインドする必要があります。プロパティ変更イベントも使用できます。

注:データが巨大な場合は、CTEまたはページングのようなものを使用してデータをフェッチします。

于 2012-06-04T14:06:47.537 に答える