在用户设置中将属性从Radiobuttons绑定更改为Enum

时间:2012-10-01 22:06:23

标签: wpf enums radio-button settings

我制作了一个单位选择器radiobutton,“mm”和“inches”,以允许用户在公制和英制单位之间切换。我有两个单选按钮绑定绑定到设置文件中的枚举。我用这个作为参考,这很好用。 Storing a radio button selection in the settings

我现在需要刷新所有具有测量结果的属性,以反映用户对公制或英制的偏好。这是在启动时说单位设置为公制,但他们希望看到它们在帝国中的含义。用户选择英制单选按钮以显示英制测量值,所有数据将在单击单选按钮“英寸”时刷新,显示屏将显示在英制测量中,如何在设置文件中绑定到枚举的单选按钮上更改属性?或者,如果有不同的方式?

如果我不需要存储他们的公制或英制的偏好,我会切换到bool,每个单选按钮,并使用通知属性更改。

修改 弄清楚了。我发布了它作为答案。

2 个答案:

答案 0 :(得分:0)

我发现你需要绑定到枚举

我认为你仍然需要通知。

您必须实施INotifyPropertyChanged

INotifyPropertyChanged

NotifyPropertyChanged();

将通知所有

答案 1 :(得分:0)

所以当我试图让我的代码的不同部分工作时,我想通了。

我原来的radiobuttons看起来像这样。

<!--Unit Selector-->
        <ribbon:RibbonGroup x:Name="Unit_Selection" Header="Units">
            <StackPanel DataContext="{StaticResource Settings}">
                <!--Metric-->
                <RadioButton GroupName="UnitsSelector"  Content="mm" x:Name="Metric" IsChecked="{Binding Path=Default.Units, Mode=TwoWay, Converter={StaticResource enumBooleanConverter},
                     ConverterParameter=mm}" />

                <!--Imperial-->
                <RadioButton GroupName="UnitsSelector" Content="inches"  x:Name="Imperial" IsChecked="{Binding Path=Default.Units, Mode=TwoWay, Converter={StaticResource enumBooleanConverter}, 
                     ConverterParameter=inches}" />
            </StackPanel>
        </ribbon:RibbonGroup>

将绑定指向用户设置枚举。

我将绑定更改为属性。获取xaml代码

<ribbon:RibbonGroup x:Name="Unit_Selection" Header="Units">
            <StackPanel>
                <RadioButton IsChecked="{Binding Path=UnitProperty, Converter={StaticResource enumBooleanConverter}, ConverterParameter=mm}">mm</RadioButton>
                <RadioButton IsChecked="{Binding Path=UnitProperty, Converter={StaticResource enumBooleanConverter}, ConverterParameter=inches}">inches</RadioButton>
            </StackPanel>
        </ribbon:RibbonGroup>

...和财产

public Unit UnitProperty
    {
        get
        {
            return Properties.Settings.Default.Units;
        }
        set
        {
            if (Properties.Settings.Default.Units != value)
            {
                Properties.Settings.Default.Units = value;
                NotifyPropertyChanged("UnitProperty");
                NotifyPropertyChanged(String.Empty);
            }
        }
    }

我不得不添加NotifyPropertyChange(String.Empty);让它来更新我的其他属性。

我还发现我需要将INotifyPropertyChanged作为基类添加到我的通知类中。

现在我必须通过并在用户在mm和英寸之间切换时添加处理。