我有一个 silverlight viewmodel 部分,它看起来像这样:
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 并显示一些列。其中三列很简单:姓名、年龄、性别。第四个有点棘手。我希望第四列包含 Person.Answers 属性中的一个问题的“QuestionOrAnswerText”,该属性对应于第四列的列标题中的组合框的选定值,并且当用户更改选定值时更改在上述组合框中。组合框的 selectedvalue 属性将绑定到我的视图模型的 SelectedQuestionID 属性,我希望能够以某种方式绑定到我的 datagrid 列中的该属性以获取我的字典值。
我很难弄清楚在这种情况下要使用什么绑定路径。
这是我的 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”部分之后有一个额外的右花括号。但是,这会使括号不平衡。
谢谢,马修