当绑定值为true时,RadioButton不显示为“已检查”

时间:2017-07-26 09:39:19

标签: xaml mvvm

在我的项目中,我在构造ViewModel时将bool属性设置为true。

在View中,我有一个RadioButton,它绑定到这个属性的值。第一次打开View时,RadioButton被“检查”(完美,正是我想要的!)。

但是,如果我关闭然后重新打开View,则不会“检查”RadioButton,尽管绑定属性的值为“true”。在我的构造函数中,我将'StaggeredMode'设置为true,但是setter被调用三次(首先,value = true;其次,value = false;第三,value = true)

任何帮助将不胜感激!

XAML:

<RadioButton GroupName="AppointmentStart" 
             Content="Staggered"
             IsChecked="{Binding StaggeredMode, Mode=TwoWay}"
             VerticalAlignment="Top" 
             HorizontalAlignment="Left"
             Margin="310,247,0,0" />

C#:

private bool staggeredMode;
public bool StaggeredMode
{
    get { return staggeredMode; }
    set { staggeredMode = value; }
}

1 个答案:

答案 0 :(得分:0)

您的StaggeredMode属性应该是可观察的,以便可以通过ViewModel通知视图有关属性的更改。

您可以自己实施INotifyPropertyChanged或使用现有的实施方式,如thisthisthis

以下是INotifyPropertyChanged interface的基本实现:

public abstract class ObservableObject : INotifyPropertyChanged
{
    public virtual void RaisePropertyChanged(string propertyName)
    {
        OnPropertyChanged(propertyName);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }
}

然后从ObservableObject派生ViewModel,并在每次更改属性值时引发OnPropertyChanged事件:

public class MyViewModel : ObservableObject
{
    ...
    private bool staggeredMode;
    public bool StaggeredMode
    {
        get { return staggeredMode; }
        set
        {
            staggeredMode = value;
            OnPropertyChanged("StaggeredMode");
        }
    }
    ...
}