【问题标题】:Get property changed from Radiobuttons bind to Enum in User Settings获取属性从单选按钮绑定到用户设置中的枚举
【发布时间】:2012-09-22 19:18:57
【问题描述】:

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

我现在需要刷新我的所有属性,包括我的测量值,以反映用户对公制或英制的偏好。那是在启动时说单位设置为公制,但他们想看看它们是英制的。用户选择英制单选按钮显示英制尺寸,当单击单选按钮“英寸”时,所有数据都会刷新,显示会以英制尺寸显示,但是我该怎么做在与设置文件中的枚举绑定的单选按钮上更改属性?或者是否有其他方法?

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

编辑 弄清楚了。我将其发布为答案。

【问题讨论】:

    标签: wpf enums radio-button settings


    【解决方案1】:

    我看到你需要绑定到一个枚举

    我认为你仍然需要通知。

    你必须实现 INotifyPropertyChanged

    INotifyPropertyChanged

    NotifyPropertyChanged();
    

    将通知所有人

    【讨论】:

    • 我的枚举在设置文件中,如果您阅读我添加的链接,您会看到我做了什么,我怎样才能将 NotifyPropertyChanged 添加到该文件中?
    • 我在“仍需通知”中的意思
    • 感谢您的帮助,但您的回答太含糊,帮助不大。您不能通过绑定到用户设置来“仍然需要通知”,如果可以的话,这就是我想要的。我正在处理我的另一段代码并发现了我的错误。我发布了我发现的内容。我认为这符合您希望我接受更改通知的方式。
    • 所以同意它是模糊的。是我的意思,但我必须离开才能扩展。
    【解决方案2】:

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

    我原来的单选按钮看起来像这样。

    <!--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>
    

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

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

    <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 作为基类添加到我的通知类中。

    现在我必须检查并添加用户在毫米和英寸之间切换时的处理。

    【讨论】:

      猜你喜欢
      • 2014-10-14
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多