質問:DataGridComboBoxのほとんどのコードサンプルは、ItemsSourceとして静的リソースを使用しているようです。私のユースケースでは、バインドされたオブジェクトごとに異なるItemsSourceを提供したいと思います。 これはできますか?
背景:DataGridComboBoxColumnコントロールを使用して、QuestionクラスオブジェクトのコレクションをWPFDataGridにバインドしようとしています。Answer文字列はSelectedValueを提供します。AnswerDomainリストで各ComboBoxのItemsSourceを提供したいと思います。AnswerDomainは、質問ごとに異なります。
クラス
public class Question
{
string Answer {get; set;}
List<string> AnswerDomain {get; set;}
//...other stuff
}
XAML
<DataGrid ItemsSource="{Binding Path=InspectionItems}" AutoGenerateColumns="False" Name="dataGrid1" >
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Answer Domain"
DisplayMemberPath="Answer"
SelectedValuePath="Answer"
ItemsSource="{Binding Path=AnswerDomain}"
>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
問題:いくつかの問題があります。現在の重要な問題は、各DataGrid行のComboBoxがAnswerDomain文字列を表示していないことです。一連のXAMLの組み合わせを試しましたが、成功しませんでした。StackOverflowを手伝ってください。
更新: 以下で選択したソリューションが機能しました。さらにいじくり回した後UpdateSourceTrigger=PropertyChanged
、SelectedItemに追加することで、コンボボックスでのユーザーの変更が基になるカスタムオブジェクトに反映されました。
<DataGridTemplateColumn Header="Answer">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
ItemsSource="{Binding AnswerDomain}"
SelectedItem="{Binding Answer, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>