C# 如果单选按钮复制到同一属性,则WPF绑定到单选按钮。,。,。不更新模型

C# 如果单选按钮复制到同一属性,则WPF绑定到单选按钮。,。,。不更新模型,c#,wpf,mvvm,C#,Wpf,Mvvm,这是使用IValueConverter将单选按钮绑定到枚举属性的视图(工作正常) 如果我将这些单选按钮复制如下XAML <Grid.Resources> <l:enumBoolConverter x:Key="ebc" /> <l:EnumStringConverter x:Key="es" /> </Grid.Resources> <StackPanel>

这是使用IValueConverter将单选按钮绑定到枚举属性的视图(工作正常)

如果我将这些单选按钮复制如下XAML

 <Grid.Resources>
            <l:enumBoolConverter x:Key="ebc" />
            <l:EnumStringConverter x:Key="es" />
        </Grid.Resources>
        <StackPanel>
            <StackPanel>
                <RadioButton IsChecked="{Binding YesOrNo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ebc}, ConverterParameter=Yes}">Yes</RadioButton>
                <RadioButton IsChecked="{Binding YesOrNo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ebc}, ConverterParameter=No}">No</RadioButton>
                <RadioButton IsChecked="{Binding YesOrNo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ebc}, ConverterParameter=Maybe}">Maybe</RadioButton>
                <Separator />
                <TextBox Text="{Binding YesOrNo, Converter={StaticResource es}, Mode=OneWay}" />
            </StackPanel>
            <StackPanel>
                <RadioButton IsChecked="{Binding YesOrNo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ebc}, ConverterParameter=Yes}">Yes</RadioButton>
                <RadioButton IsChecked="{Binding YesOrNo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ebc}, ConverterParameter=No}">No</RadioButton>
                <RadioButton IsChecked="{Binding YesOrNo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ebc}, ConverterParameter=Maybe}">Maybe</RadioButton>
                <Separator />
                <TextBox Text="{Binding YesOrNo, Converter={StaticResource es}, Mode=OneWay}" />
            </StackPanel>
        </StackPanel>
ViewModel的CS代码

public enum YesOrNoOptions
    {
        Yes,
        No,
        Maybe
    }
    public class DemDC : INotifyPropertyChanged
    {
        public DemDC()
        {
            _yt = YesOrNoOptions.Yes;
        }
        public YesOrNoOptions _yt;
        public YesOrNoOptions YesOrNo
        {
            get
            {
                return _yt;
            }
            set
            {
                _yt = value;
                Notify("YesOrNo");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public void Notify(string pname)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(pname));
        }
    }
先谢谢你

所有视图的逻辑应该是一样的,不是吗

从“是”到“否”,两个面板都进行了良好的更新。。 但是,当从“否”返回“是”时,它会停留在“否”选项本身中

因为第二个单选按钮正在将“否”值设置为枚举???当操作“是”时,不是吗


如果是这样的话。。?为什么在从“是”选择到“否”时不发生此问题?

要避免此问题,可以在更新属性时禁用属性更改:

private bool suppress;
private YesOrNoOptions _yt;
public YesOrNoOptions YesOrNo
{
    get
    {
        return _yt;
    }
    set
    {
        if (_yt != value && !suppress)
        {
            _yt = value;
            suppress = true;
            Notify("YesOrNo");
            suppress = false;
        }
    }
}

要避免此问题,可以在更新属性时禁用属性更改:

private bool suppress;
private YesOrNoOptions _yt;
public YesOrNoOptions YesOrNo
{
    get
    {
        return _yt;
    }
    set
    {
        if (_yt != value && !suppress)
        {
            _yt = value;
            suppress = true;
            Notify("YesOrNo");
            suppress = false;
        }
    }
}

我们必须抑制,因为要避免通过第二个单选按钮写入属性调用。。。不是。信息技术非常感谢@Adi Lesterwe不得不抑制,因为为了避免通过第二个单选按钮进行属性写入调用。。。不是。信息技术非常感谢你@Adi Lester