1

私は調査フォームで作業しています。調査は、次の構造のオブジェクトから作成されます。

調査--has->セクション--has->質問--has->QuestionOptions

各QuestionOptionには次
のものがあります。QuestionID(質問に関連)
OptionText(ComboBox(DisplayMemeberバインディング)に表示されるもの)
OptionValue(オプションのスコア、通常は1〜5(SelectedValuePathバインディング))

調査の結果は、次の構造に保存されます。

結果--has->回答

各回答には次のものがあります。QuestionID(
回答をデータベースの調査オプションにリンクするため)
スコア(これは、ComboBoxのユーザーによる値セレクターから取得されます)

保存は問題なく機能しますが、調査を編集する必要がある場合は、これまでに選択した結果を戻す必要があります。オブジェクト「Result」は完全に入力されているので、すべてのデータを利用できます。

問題はGUIにあります:
DataTemplateから作成された各ComboBoxを、保存された調査の対応する値で初期化または設定するにはどうすればよいですか?ComboBoxがオブジェクト「Survey」から生成され、回答がオブジェクト「Result」 にあることを考慮してください。

ComboBoxに使用されるXAMLコードは次のとおりです。

<DataTemplate x:Key="QuestonTemplate">
            <StackPanel Margin="10,2,10,2" Orientation="Vertical">
                <TextBlock HorizontalAlignment="Left" Text="{Binding Path=QuestionText}" TextWrapping="Wrap" Height="Auto" Margin="5" FontSize="14" />
                <ComboBox x:Name="Options" Grid.Row="1" HorizontalAlignment="Left" Width="400"  Margin="10,0,10,0" 
                    Style="{StaticResource FlatComboBoxPaleYellow}"                              
                    ItemsSource="{Binding Path=QuestionOptions}" 
                    SelectedValuePath="OptionValue" 
                    DisplayMemberPath="OptionText"                         
                    SelectionChanged="Answer_SelectionChanged" />
            </StackPanel>
        </DataTemplate>

私はXAMLコードまたはC#(さらに良いです!私は古い学校です)または任意の提案を受け入れています。

ありがとう!

4

1 に答える 1

0

Question オブジェクトが追加のプロパティを保持することをお勧めします: SelectedOption

これは、コンボ ボックスの SelectedItem にバインドされたデータになります。

<ComboBox x:Name="Options" Grid.Row="1" HorizontalAlignment="Left" Width="400"  Margin="10,0,10,0" 
                Style="{StaticResource FlatComboBoxPaleYellow}"                              
                ItemsSource="{Binding Path=QuestionOptions}" 
                SelectedValuePath="OptionValue" 
                DisplayMemberPath="OptionText"   
                SelectedItem="{Binding Path=SelectedOption}"                      
                SelectionChanged="Answer_SelectionChanged" />

次に、Survey オブジェクトで、Questions コレクション内の各 Question に対して、その質問に対応する Result オブジェクト内の Answers を見つけ、その質問の対応する QuestionOption を検索し、それを Question オブジェクトの SelectedOption プロパティに割り当てます。

public class Question : INotifyPropertyChanged
{
    public QuestionOption SelectedOption
    {
        get
        {
            return _selectedOption;
        }
        set
        {
            if (value != _selectedOption)
            {
                _myList = value;
                OnPropertyChanged("SelectedOption");
            }
        }
    }
    private QuestionOption _selectedOption = new QuestionOption();

    // ... other properties ...
}
于 2012-04-12T17:58:54.643 に答える