0

以下のように定義されたデータグリッド「dgSubsytem」列があります

 <my:DataGridComboBoxColumn x:Name="cmbSubSysSupplier_SRV" Header="Supplier"  Width="160"                                            
                                         ItemsSource="{Binding RelativeSource}" SelectedValueBinding="{Binding SupplierId}"   />

コードからわかるように、グリッド内にコンボ ボックスがあります。

このコンボ ボックスの項目ソースは、コード ビハインドでバインドされているデータ テーブルです。

グリッドのアイテム ソースも、コード ビハインドでバインドされた別のデータ テーブルです。

コードビハインドでコンボボックスのアイテムソースをバインドするコードは次のとおりです

cmbSubSysSupplier_SRV.ItemsSource = dsComboBox.Tables[3].DefaultView;
cmbSubSysSupplier_SRV.DisplayMemberPath="FullName" ;
cmbSubSysSupplier_SRV.SelectedValuePath = "SupplierId"; 

問題は、コンボ ボックス自体がレンダリングされないことです。しかし、 text としてレンダリングされた Supplier の値を見ることができます。何が問題ですか?

4

3 に答える 3

0

ここには2つの部分があります。

ComboBox:ItemsSourceに入力される値のリストは、静的リソースを使用してバインドする必要があり、List<X>フィールドはViewModelから公開されます。

実際の値(ここではX)は、データ項目へのバインドを使用してSelectedItemBindingにバインドする必要があります。

コードビハインドでのバインドは必要ありません。

于 2012-10-11T11:43:29.350 に答える
0

私は個人的に DataGridComboBoxColumn と長い間戦っていましたが、その方法は を使用することだと思いますDataGridTemplateColumn
例を次に示します。


多くのコードに見えますが、効果的です。コレクションを resource として配置します。

<Grid.Resources>
    <CollectionViewSource x:Key="StructuresCollection" Source="{Binding StructuresList, Mode=OneTime}"/>
</Grid.Resources>

 <DataGridTemplateColumn Header="Structure" >
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Structures.Name}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate >
        <DataTemplate>
            <ComboBox x:Name="CStructures" SelectedItem="{Binding Structures}"  DisplayMemberPath="Name" SelectedValue="{Binding IDStructure, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="{Binding IDStructure}" ItemsSource="{Binding Source={StaticResource StructuresCollection}}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
于 2012-10-11T15:09:28.500 に答える
0

コード ビハインドはどの時点で実行されますか?

ItemsSourceXAML とコード ビハインドの 2 つの場所で を設定しています。どちらが 2 番目に実行されても、最初の値が上書きされるため、最後の値セットのみが使用されます。

あなたの XAML は最後に実行RelativeSourceされ、おそらくあなたの のプロパティではないDataContextので、あなたComboBoxは何にもバインドされていないのではないかと思います。

ItemsSourceこれを修正するには、XAML でバインドを削除するだけです。DataGridComboBoxColumn

<my:DataGridComboBoxColumn x:Name="cmbSubSysSupplier_SRV" 
                           Header="Supplier" Width="160"
                           SelectedValueBinding="{Binding SupplierId}"  />

さらに、DefaultViewの aDataTableはタイプ のオブジェクトを返し、またはと呼ばれるプロパティDataViewDataView持たないため、およびプロパティは機能しません。FullNameSupplierIdSelectedValuePathDisplayMemberPath

KeyValuePair<int,string>データ項目からリストを作成し、そのリストにバインドしてから、 toとtoをComboBoxColumn.ItemsSource切り替えることをお勧めしますSelectedValuePath"Key"DisplayMemberPath"Value"

于 2012-10-11T14:02:04.707 に答える