1

我正在使用 MVVM 模式。

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

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

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

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

4

2 回答 2

0

我正在使用转换器,以便可以将生成的布尔值存储到我的枚举属性中。

转换器是一个可怕的解决方案,到目前为止它已经很普遍,并且对很多关于 bindingRadioButtons的重复问题的公认答案,“正确”的方式是使用 aListBoxSelectedItem属性,这样就不会有很多人RadioButtons可以争夺你的财产。

在这个答案中可以看到如何做到这一点的一个例子。如果切换视图SelectedItem应该将源绑定到目标,请选择RadioButton具有相应值的 。

于 2012-07-27T21:35:48.827 回答
0

我使用了本教程中的解决方案:http ://wpftutorial.net/RadioButton.html

然后从 UI 调用我的设置器并更改所有活动的单选按钮状态。对我来说,为每个单选按钮设置一个新的组名会有所帮助,这样它们就不会在同一个组中并且不会相互影响。

<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();
    }
}
于 2014-02-12T10:17:02.833 回答