停止单选按钮设置器在视图负载上调用

时间:2012-07-27 20:38:28

标签: c# wpf mvvm radio-button

我正在使用MVVM模式。

在我的viewmodel中,我的单选按钮有一个枚举属性。此属性连接到我的模型的枚举属性:

public MyEnum MyEnumVar
{
     get { return MyModel.EnumVar; }
     set { MyModel.EnumVar = value; }
}

如果我改为另一个视图,然后改回原始视图,而不是调用getter,则调用setter,传递的值是我的单选按钮的第一个选项。

基本上每次我切换视图我的模型单选按钮的枚举都会被重置。有没有办法阻止设置者被调用?

2 个答案:

答案 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();
    }
}