1

したがって、外部関係があるいくつかのセルにいくつかの ComboBoxes を持つ WPF DataGrid がありますが、これは、一度に何百もの ComboBoxes が読み込まれ、時間がかかりすぎることを意味します。やりたいことは、ComboBox がロードされる時点でクリックされるまでラベルをロードすることです。これは TextBox で簡単に実行できます。

問題は、コンボボックスが機能し、ユーザーが多数の表示値 (例: {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>

よろしく、フグ

4

2 に答える 2

1

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

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

于 2011-08-09T10:05:39.033 に答える
0

あなたの文章を読んで、2つのことが頭に浮かびました

1) データグリッドの仮想化。これにより、負荷が軽減される可能性があります。

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

2b) ComboBox には、編集可能なテンプレートと編集不可能なテンプレートがあります (Blend で簡単に見つけることができます)。編集不可能なテンプレートのコンテンツをバインドして、静的な文字列と編集可能なテンプレートをリレーションに表示します。これにより、selectedItem を編集しようとしたときにのみ関係が表示されます。繰り返しになりますが、NHibernate のような ORM を使用すると、LazyLoading 機能を利用できます。

于 2011-08-09T13:21:58.927 に答える