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