2010-01-29 4 views
3

Я искал this article, но у меня проблемы с сохранением перечисленного значения в настройках.Сохранение выбора переключателя в настройках

Я создал следующее перечисление

public enum FType 
{ 
    None, 
    Delimited, 
    FixedWidth, 
    XML 
}; 

У меня есть выбор кнопки радио работает хорошо, но теперь я хочу, чтобы сохранить выбранный параметр в настройках, но там не появляется, чтобы быть возможностью хранить перечислимая переменная.

Я предположил, что могу преобразовать перечисление в строку, а затем преобразовать обратно, но, будучи немного нубом, когда дело доходит до WPF, я не совсем уверен, с чего начать.

Вот код, который я генерироваться до сих пор:

app.xaml

<Application x:Class="Widget.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:properties="clr-namespace:Widget.Properties" 
    StartupUri="Window1.xaml" 
    Exit="Application_Exit"> 
    <Application.Resources> 
     <properties:Settings x:Key="Settings" /> 
    </Application.Resources> 
</Application> 

App.xaml.cs

public partial class App : Application 
{ 
    private void Application_Exit(object sender, ExitEventArgs e) 
    { 
     Widget.Properties.Settings.Default.Save(); 
    } 
} 

Windows.xaml

<Window x:Class="Widget.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:Widget" 
    Title="Window1" Height="85" Width="300"> 
    <Window.Resources> 
     <local:EnumBooleanConverter x:Key="enumBooleanConverter"/> 
    </Window.Resources> 
    <Grid> 
     <StackPanel> 
      <RadioButton GroupName="FileType" Content="Delimited" IsChecked="{Binding Path=Default.FileType, Mode=TwoWay, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Delimited}" /> 
      <RadioButton GroupName="FileType" Content="Fixed Width" IsChecked="{Binding Path=Default.FileType, Mode=TwoWay, Converter={StaticResource enumBooleanConverter}, ConverterParameter=FixedWidth}"/> 
      <RadioButton GroupName="FileType" Content="XML"   IsChecked="{Binding Path=Default.FileType, Mode=TwoWay, Converter={StaticResource enumBooleanConverter}, ConverterParameter=XML}"/> 
     </StackPanel> 
    </Grid> 
</Window> 

Converter.cs

public class EnumBooleanConverter : IValueConverter 
    { 
     public EnumBooleanConverter() 
     { 
     } 

     #region IValueConverter Members 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      string parameterString = parameter as string; 
      if (parameterString == null) 
       return DependencyProperty.UnsetValue; 

      if (Enum.IsDefined(value.GetType(), value) == false) 
       return DependencyProperty.UnsetValue; 

      object parameterValue = Enum.Parse(value.GetType(), parameterString); 

      return parameterValue.Equals(value); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      string parameterString = parameter as string; 
      if (parameterString == null) 
       return DependencyProperty.UnsetValue; 

      return Enum.Parse(targetType, parameterString); 
     } 
     #endregion 
    } 

ответ

1

Ваш код выглядит просто отлично, за исключением 2-х проблем, которые я думаю, может быть мешает вам хранящих настройки:

  • Я думаю, вы должны указать DataContext для ваших RadioButton с. Просто измените Window1 так:

    <StackPanel DataContext="{StaticResource Settings}"> 
        <RadioButton GroupName=... /> 
        <RadioButton GroupName=... /> 
        <RadioButton GroupName=... /> 
    </StackPanel> 
    

    (Примечание: Если StaticResource не работает, попробуйте с помощью DynamicResource)

  • Во-вторых, из вашего поста, кажется, что вы храните значения в string в настройках. Просто измените это и вместо этого установите тип данных FileType на Ftype. (Если вы не знаете, как это сделать, скажите мне)

После выполнения этих двух изменений вы обязательно получите эту работу! Надеюсь;)

+0

Я не уверен, как изменить тип свойства «FileType», поскольку конструктор настроек предоставляет только стандартные типы в списке, а FType - это мое собственное перечисление, его нет. Я могу видеть, как изменить настройки. Designer.cs можно редактировать, но это автоматически сгенерированный файл и будет перезаписан. Пока я не получу выбранную опцию, я не буду знать, работает ли статический или динамический ресурс (он компилируется с обоими параметрами, поэтому он обязан работать.; O) Спасибо за помощь. – TeamWild

+1

Хорошо .. Сделайте так: В визуальной студии Щелкните правой кнопкой мыши свой проект >> Свойства >> Настройки. Здесь у вас есть свойство 'FileType', верно? Теперь в раскрывающемся списке «Тип» выберите «Обзор» и введите свое имя в формате [namespace]. [Class]. И вы сделали! В противном случае вы также можете вручную отредактировать файл: не 'Settings.Designer.cs' (который автоматически сгенерирован - как вы сказали), а файл' Settings.settings'. Это не сгенерировано автоматически.Надеюсь, это поможет :) – mg007

+0

Mihir. Вы абсолютная звезда! Благодарю. – TeamWild

Смежные вопросы