1

我正在填写一份调查表。调查是从具有以下结构的对象创建的:

调查 --has--> 部分 --has--> 问题 --has--> QuestionOptions

每个 QuestionOption 都有:
QuestionID(与 Question 相关)
OptionText(ComboBox 中将显示什么(DisplayMemeber 绑定))
OptionValue(选项的得分,通常为 1-5(SelectedValuePath 绑定))

调查结果存储在以下结构中:

结果--有--> 答案

每个答案都有:
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 集合中的每个问题,在 Result 对象中找到与该问题相对应的任何答案,查找该问题的相应 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 回答