0

次のような部分の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" 部分の後に余分な閉じ中かっこが必要です。ただし、ブラケットのバランスが崩れます。

ありがとう、マシュー

4

0 に答える 0