2011-08-09 11 views
1

外部関係のあるセルにはいくつかのComboBoxを含むWPF DataGridがありますが、これは何百ものComboBoxes時間がかかりすぎる時間がかかる。私たちがやりたいことは、ComboBoxがロードされた時点でクリックされるまでラベルをロードすることです.TextBoxで簡単に行うことができます。DataViewを使用したWPF DataGridでは、クリックするまでComboBoxをラベルとして表示したい

問題は、Googleのコンボボックスが機能し、複数の表示値({Car、Dog、Cat}など)から選択することで列の外部キー値を変更できることです。しかし、ユーザーがラベルをクリックする前に、ラベルには外部キー値自体が表示されます(例:{1、2、3})。

私たちは何ができるでしょうか?どのような助けを最も感謝!

<DataGridTemplateColumn Header="Column Name" SortMemberPath="Column Name"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Label Content="{Binding Path=DataViewBehindColumnName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox 
      DataContext="{DynamicResource ResourceKey=ViewModel}" 
      ItemsSource="{Binding Path=ReferenceTableName, 
         Converter={StaticResource dataViewToListConverter}}" 
      DisplayMemberPath="ReferenceTableDisplayNamesColumn" 
      SelectedValuePath="ReferenceTablePrimaryKeyColumn" 
      SelectedValue="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, 
          Path=Item[DataViewBehindColumnName]}" 
      /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 

敬具、 ふぐ

答えて

1

は、行ごとのViewModelを作成し、そこでの解決文字列値とキーを表し、別のプロパティを表しプロパティを提供します。ラベルContent-propertyを文字列プロパティに、コンボボックスSelectedValueをキープロパティにバインドします。

MVVMを話さない:問題のあるプロパティの解決された文字列値を含むデータグリッドに必要なすべてのプロパティを保持するラインアイテムラッパーを作成します。私はあなたのポスト

1)データグリッドの仮想化を読んだとき

+0

これを行う方法はありますか?したがって、私たちは1つの外部関係ごとに実装する必要はありませんか?テーブルごとに15個の外部キーがあるとしましょう...アプリケーションで40個のテーブルを編集できるようにしたい - メンテナンスの悪夢? – Fugu

+0

@ Fugu:私はこの質問に答えるのに十分な情報がありません。私は、いくつかのORラッパーがあなたのためにそのようなことをすることができると思います。私の場合は、自己作成ツールを使用してそのようなビューモデルを作成します。あなたがあなたのORマッパーの文脈で質問を投稿するならば、あなたはこれに対する答えを得るでしょう。データベースや他のソースに直接アクセスしてアクセスするのではなく、抽象レベルで解決を行うヘルパークラスについて考えてみてください。 – HCL

+0

多くのありがとう。私たちはオブジェクト・リレーショナルをやっていません。データ提出の要件によっては、DataSetsが後ろにあり、DataViewがコントロールをバインドする必要があります。 DataViewフィルターを変更するコマンド。 DataViewの代わりにリストが必要なコントロールのコンバーター。 – Fugu

0

私の心に来て二つあります。これにより、負荷を軽減できます。

2a)boolプロパティ "ShowData"を使用してDataObjectのプロキシを構築します。これはデフォルトではfalseで、コントロールがクリックされたときにtrueに設定されます。あなたはcommandBindingでそれを行うことができます。 ORMを使用していない場合は、DataSet SourceCodeを拡張してこの機能を追加できます。しかし、これは仕事の忙しさに終わる可能性があります。

2b)コンボボックスには、編集可能なテンプレートと非編集可能なテンプレートがあります(Blendで簡単に見つけることができます)。編集可能ではないテンプレートのコンテンツをバインドして、静的なStringと編集可能なものをリレーションに表示します。これは、selectedItemを編集しようとしたときのみリレーションを表示します。再度、NHibernateのようなORMを使用すると、LazyLoading機能から利益を得ることができます。

関連する問題