次のような部分のSilverlightビューモデルがあります。
class ViewModel {
ObservableCollection<Person> People;
ObservableCollection<Question> Questions;
int SelectedQuestionID;
}
class Person {
int ID;
string Name;
int Age;
string Gender;
Dictionary<int, Question> Answers;
}
class QandA {
int ID;
string QuestionOrAnswerText;
}
「Person」オブジェクトの ObservableCollection を DataGrid にバインドし、いくつかの列を表示したいと考えています。名前、年齢、性別の 3 つの列は簡単です。4 つ目はもう少しトリッキーです。Person.Answers プロパティの質問の 1 つの「QuestionOrAnswerText」を含む 4 番目の列が必要です。これは、その 4 番目の列の列ヘッダーにあるコンボボックスの selectedvalue に対応し、ユーザーが選択した値を変更すると変更されます前述のコンボボックスで。コンボボックスの selectedvalue プロパティは、viewmodel の SelectedQuestionID プロパティにバインドされ、データグリッド列でそのプロパティに何らかの方法でバインドして、辞書の値を取得できるようにしたいと考えています。
この場合、どのバインディング パスを使用するかを判断するのに非常に苦労しています。
このコラムの XAML は次のようになります。
<sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn.HeaderStyle>
<Style TargetType="dataprimitives:DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ComboBox DataContext="{Binding SelectedDivision}" ItemsSource="{Binding Questions}"
SelectedValue="{Binding SelectedQuestion, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
SelectedValuePath="ID" DisplayMemberPath="Text"></ComboBox>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</sdk:DataGridTemplateColumn.HeaderStyle>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Answers[{Binding SelectedQuestion, RelativeSource={RelativeSource TemplatedParent}}].Text}"></TextBlock>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
XAML エディターは、{Binding Path=Answers[..].Text} に問題があることを示しており、".Text" 部分の後に余分な閉じ中かっこが必要です。ただし、ブラケットのバランスが崩れます。
ありがとう、マシュー