1

3列のデータグリッドがあります。列はProperty, Operator, Value. これらは、データベースに保存されているドキュメントに関するものです。Propertyおよび列の値はOperator、ビジネス オブジェクトの列挙から定義されます。

DataGrid をバインドする次のクラスがあります。

public class DocumentProperty
{
    public SearchProperties SearchProperty { get; set; }
    public SearchOperator Operator { get; set; }
    public string SearchValue { get; set; }
}

最初の 2 つのプロパティは列挙型です。上記のクラスの観察可能なコレクションをデータグリッドにバインドしました。すべての列はテンプレート列です。最初の 2 つの列にはCellEditTemplate、コンボボックスが定義された があります。オブジェクト データ プロバイダーを使用して列挙型をバインドしました。3 番目の列はテンプレート列で、テンプレート セレクターを使用して読み込まれます。これは、最初の列で選択したプロパティに基づいて異なるコントロールをロードできるようにするためです。

ここに画像の説明を入力

また、3 番目の列にコントロールを動的にロードし (列のデータ テンプレートを明示的に設定)、データソースを設定する (AutoCompleteBox の場合) コンボボックスの選択変更イベントがあります。上記のアプローチは、Allow Add Row の設定が true に設定された状態でグリッドが最初にロードされたときに正常に機能しています。ロードされたコントロールの値をオブジェクトに取得できます (AutoCompleteBox で選択したアイテムを使用するなど)。

しかし、上記の入力が検索フィルターとして保存され、取得されるという問題に直面しています。取得中に、プロパティの値を動的にロードされたコントロールにバインドできません。DataGrid のさまざまなイベント (RowLoading、Loaded、SelectedCellChanged など) を試しました。

最後に、テンプレート セレクターでコントロールの値を設定できます。しかし、画面を見ると、空白のコンテンツが表示されています (オートコンプリートボックスとコンボボックスの場合)。動的コントロールをSearchValueに再バインドするにはどうすればよいですか?

詳細:

上記のグリッドのコンテンツは、DocumentProperty の監視可能なコレクションとして格納されます。オブジェクトの値は、データベース テーブルに XML として保存されます。ユーザーが再度ログインすると、XML のコンテンツが DocumentProperty の Observable コレクションに変換され、グリッドに再度バインドされます。ここで、セル テンプレートを配置してテキストブロックをその中に配置すると、問題なく SearchValue プロパティをバインドできるという問題に直面しています。しかし、検索値プロパティでバインドされたオブジェクトの ID をストーミングしています。したがって、バインドされたグリッドのテキストブロックには常に ID が表示されます。

上記のAutoCompleteBoxesにTempalte、Docment、Ownerなどの対応する名前を表示したいので。したがって、セル テンプレート セレクターを使用して列を DataTemplate 列として作成します。

4

0 に答える 0