2010-01-29 4 views
3

J'ai regardé this article mais j'ai des problèmes pour enregistrer la valeur énumérée dans les paramètres.Mémorisation d'une sélection de bouton radio dans les paramètres

J'ai créé le ENUM suivant

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

J'ai la sélection de bouton radio de travail bien mais je veux maintenant stocker l'option sélectionnée dans les paramètres, mais il ne semble pas être la possibilité de stocker un variable énumérée. J'ai supposé que je pourrais convertir l'énumération en une chaîne et ensuite convertir en arrière mais étant un peu d'un noob quand il s'agit de WPF je ne suis pas vraiment sûr par où commencer.

Voici le code que j'ai produit jusqu'à présent:

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 
    } 

Répondre

1

Votre code semble très bien, à l'exception des problèmes 2 que je pense peut vous empêcher de stockage des paramètres:

  • Je pense que vous devez spécifier un DataContext pour vos RadioButton s. Il suffit de modifier votre Window1 comme ceci:

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

    (Note: Si StaticResource ne fonctionne pas essayez d'utiliser DynamicResource)

  • En second lieu, à partir de votre poste, il semble que vous stockez valeurs string dans les paramètres. Changez simplement ceci et réglez plutôt le type de données de FileType à Ftype. (Si vous ne savez pas comment faire 2, dites-le moi)

Après avoir fait ces 2 changements, vous aurez sûrement ce travail! J'espère;)

+0

Je ne sais pas comment changer le type pour la propriété Settings "FileType" car le concepteur de paramètres ne fournit que des types standard dans la liste et comme FType est ma propre énumération, elle n'est pas là. Je peux voir comment modifier les paramètres.Designer.cs pourrait être édité mais c'est un fichier généré automatiquement et sera écrasé. Jusqu'à ce que j'obtienne l'option sélectionnée stockée je ne saurai pas si la ressource statique ou dynamique fonctionne (elle compile avec les deux options ainsi elle est liée au travail.; O) Merci pour votre aide. – TeamWild

+1

Ok .. Faites comme ceci: En studio visuel Cliquez droit sur votre projet >> Propriétés >> Paramètres. Ici vous avez votre propriété 'FileType', n'est-ce pas? Maintenant, dans la liste déroulante 'Type', sélectionnez' Browse' et tapez manuellement votre énumération dans le format [namespace]. [Class]. Et tu as fini! Sinon, vous pouvez également modifier manuellement le fichier: pas le 'Settings.Designer.cs' (qui est généré automatiquement - comme vous l'avez dit) mais le fichier' Settings.settings'. Ce n'est pas généré automatiquement.J'espère que cela aide :) – mg007

+0

Mihir. Vous êtes une star absolue! Merci. – TeamWild

Questions connexes