Xaml 单选按钮不显示为“按钮”;勾选“;当绑定值为true时

Xaml 单选按钮不显示为“按钮”;勾选“;当绑定值为true时,xaml,mvvm,Xaml,Mvvm,在我的项目中,我在构建ViewModel时将bool属性设置为true 在视图中,我有一个单选按钮,它绑定到此属性的值。我第一次打开视图时,单选按钮已“选中”(完美,正是我想要的!) 但是,如果关闭然后重新打开视图,则RadioButton不会“选中”,尽管绑定属性的值为“true”。在我的构造函数中,我将'scatteredMode'设置为true,但是setter被调用了三次(第一次,value=true;第二次,value=false;第三次,value=true) 任何帮助都将不胜感激

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

在视图中,我有一个单选按钮,它绑定到此属性的值。我第一次打开视图时,单选按钮已“选中”(完美,正是我想要的!)

但是,如果关闭然后重新打开视图,则RadioButton不会“选中”,尽管绑定属性的值为“true”。在我的构造函数中,我将'scatteredMode'设置为true,但是setter被调用了三次(第一次,value=true;第二次,value=false;第三次,value=true)

任何帮助都将不胜感激

XAML:


您的
交错模式
属性应该是可观察的,以便可以从
视图模型
通知视图有关属性更改的信息

您可以自己实现,也可以使用现有的实现之一,如、或

以下是INotifyPropertyChanged接口的基本实现:

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);
        }
    }
}
然后从ObserveObject派生ViewModel,并在每次更改属性值时引发OnPropertyChanged事件:

public class MyViewModel : ObservableObject
{
    ...
    private bool staggeredMode;
    public bool StaggeredMode
    {
        get { return staggeredMode; }
        set
        {
            staggeredMode = value;
            OnPropertyChanged("StaggeredMode");
        }
    }
    ...
}
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);
        }
    }
}
public class MyViewModel : ObservableObject
{
    ...
    private bool staggeredMode;
    public bool StaggeredMode
    {
        get { return staggeredMode; }
        set
        {
            staggeredMode = value;
            OnPropertyChanged("StaggeredMode");
        }
    }
    ...
}