MVVM跟踪选定的单选按钮

时间:2015-01-11 06:33:01

标签: c# wpf mvvm data-binding radio-button

我有一个可观察的集合,它为单选按钮提供值。当用户从一个项目移动到另一个项目时,如果用户先前选择了该按钮,我希望自动选择相应的组单选按钮。

总结一下,这是一个多问题类型考试,我想在用户从一个问题导航到另一个问题时保持选择单选按钮。

以下是观点:

<ItemsControl ItemsSource="{Binding CurrentQuestion.Choices}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <RadioButton Content="{Binding .}" 
                                 Command="{Binding DataContext.SaveAnswerCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"
                                 CommandParameter="{Binding}"
                                 GroupName="choices"
                                 />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

可观察的集合:

public static ObservableCollection<ExamModel> Questions
    {
        get
        {
            return _questions;
        }
        set
        {
            _questions = value;
        }
    }

//this is how i keep track of which item is currently active
public ExamModel CurrentQuestion
    {
        get { return _currentQuestion; }
        set
        {
            if (_currentQuestion != value)
            {
                _currentQuestion = value;
                OnPropertyChanged("CurrentQuestion");
            }
        }

    }

模特:

public List<string> Choices
    {
        get 
        {
            if (_choices == null)
                _choices = new List<string>();

            return _choices; 
        }
        set
        {
            if (_choices != value)
            {
                _choices = value;
                OnPropertyChanged("Choices");
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

我通过使用此方法MVVM: Binding radio buttons to a view model?并使用所选单选按钮的值绑定 SelectedItem 属性来解决此问题。

所选单选按钮会在我的可观察集合 CurrentQuestion.StudentAnswer 的其中一个字段上保持跟踪。

答案 1 :(得分:0)

有一篇有趣的文章介绍了如何以多种方式处理RadioButton绑定。

请参阅Jerry Nixon on Windows: Let’s code! Data binding to a Radio Button in XAML