我正在使用MVVM模式。
在我的viewmodel中,我的单选按钮有一个枚举属性。此属性连接到我的模型的枚举属性:
public MyEnum MyEnumVar
{
get { return MyModel.EnumVar; }
set { MyModel.EnumVar = value; }
}
如果我改为另一个视图,然后改回原始视图,而不是调用getter,则调用setter,传递的值是我的单选按钮的第一个选项。
基本上每次我切换视图我的模型单选按钮的枚举都会被重置。有没有办法阻止设置者被调用?
答案 0 :(得分:0)
我正在使用转换器,以便将结果布尔值存储到我的枚举属性中。
转换器是一个可怕的解决方案,现在已经很普遍,并且对于绑定RadioButtons
的相当多的重复问题已经接受了答案,“正确”方式是使用ListBox
和{{1}这种方式,不是很多SelectedItem
可以争夺你的财产。
this answer中可以看到如何执行此操作的示例。如果您切换视图,RadioButtons
应该将源绑定到目标,请选择具有相应值的SelectedItem
。
答案 1 :(得分:0)
我使用了本教程中的解决方案:http://wpftutorial.net/RadioButton.html
然后从UI调用我的setter并更改了所有活动的单选按钮状态。对我来说,它有助于为每个单选按钮设置一个新的组名,这样它们就不在同一个组中而不会相互影响。
<RadioButton Grid.Row="1" Margin="20,30,0,40" GroupName="{Binding GroupName}" Content="Yes" IsChecked="{Binding RadioButton, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={StaticResource EnumMatchToBooleanConverter}, ConverterParameter=Yes}" />
<RadioButton Grid.Row="1" Margin="76,30,0,40" GroupName="{Binding GroupName}" Content="No" IsChecked="{Binding RadioButton, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={StaticResource EnumMatchToBooleanConverter}, ConverterParameter=No}"/>
在ViewModel中:
public string GroupName
{
get
{
return Guid.NewGuid().ToString();
}
}