0

ビューモデルの初期化に入力するリストがあります。

ListOfEmployees = new List<EmployeeBO>(employeeRepository.GetEmployees(true, true));

このリストから入力するデータグリッドにコンボボックスを取得しようとしています。

<DataGridTemplateColumn Header="U/M" MinWidth="145">
 <DataGridTemplateColumn.CellEditingTemplate>
  <DataTemplate>
   <ComboBox Name="cboUnitMeasure" 
     ItemsSource="{Binding Path=ListOfUnitMeasures}"
     DisplayMemberPath="UnitMeasureDescription" SelectedValuePath="UnitMeasureValue" 
     SelectedValue="{Binding UnitMeasureValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     HorizontalAlignment="Left" Width="140" />
  </DataTemplate>
 </DataGridTemplateColumn.CellEditingTemplate>
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
   <TextBlock Text="{Binding UnitMeasureDescription}" />
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

dg が読み込まれると、セル テンプレートに UnitMeasureDescription 値が表示されますが、編集するセルをクリックすると、コンボ ボックスに項目がありません。一方、同じプロパティ名を使用して、xml ファイルの静的リソースを itemsource として使用すると、コンボボックスには次の項目が含まれます。

<DataGridTemplateColumn Header="U/M" MinWidth="145">
 <DataGridTemplateColumn.CellEditingTemplate>
  <DataTemplate>
   <ComboBox Name="cboUnitMeasure" 
     ItemsSource="{Binding Source={StaticResource UnitMeasureData}}"
     DisplayMemberPath="UnitMeasureDescription" SelectedValuePath="UnitMeasureValue" 
     SelectedValue="{Binding UnitMeasureValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     HorizontalAlignment="Left" Width="140" />
  </DataTemplate>
 </DataGridTemplateColumn.CellEditingTemplate>
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
   <TextBlock Text="{Binding UnitMeasureDescription}" />
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

VM に ListOfEmployees を入力した直後にブレークポイントを配置すると、アイテムが含まれます。また、DisplayMemberPath と SelectedValuePath のプロパティ名が正しいことも確認しました。ここで何が間違っているのかわかりません。

4

1 に答える 1

3

「ListOfUnitMeasures」は VM のプロパティですか、それとも EmployeeBO のプロパティですか? わかりました、DataGrid の ItemsSource がに設定さList<EmployeeBO>れ、VM に「ListUnitOfMeasures」という別のリストがあると仮定すると、ここに私の説明があります。

DataGrid の各行の DataContext は、DataGrid の ItemsSource の要素と等しくなります。あなたの場合、各行は EmployeeBO をその DataContext として使用します。また、「ListOfUnitMeasures」は Employee BO のプロパティではないため、ComboBox のバインディングは機能せず、何も表示されません。

考えられる解決策の 1 つは、次のように ComboBox の Binding を変更して、親 DataGrid を指す RelativeSource を使用することです。

<ComboBox Name="cboUnitMeasure" 
     ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.ListOfUnitMeasures}"/>
于 2010-08-05T15:42:12.800 に答える