c# - interfaces - Meilleures pratiques pour stocker les paramètres de l'interface utilisateur




les interfaces en java (5)

Nous sommes en train de planifier une application WPF LoB plus grande et je me demande ce que les autres pensent être la meilleure pratique pour stocker beaucoup de paramètres de l'interface utilisateur, par exemple

  • États Expander
  • Commandes de menu
  • Propriétés de dimensionnement
  • etc...

Je n'aime pas l'idée d'avoir des dizaines de valeurs stockées en utilisant le SettingsProvider livré (c'est-à-dire le fichier App.config) bien qu'il puisse être utilisé pour le stocker dans une base de données intégrée en utilisant un SettingsProvider personnalisé. être capable d'utiliser une sorte de liaison de données est également une préoccupation. Quelqu'un at-il eu les mêmes problèmes?

Qu'avez-vous fait pour stocker beaucoup de paramètres utilisateur de l'interface utilisateur?

https://code.i-harness.com


Creuser dans la réponse d'Aogan et le combiner avec la réponse de Decasteljau et le billet de blog qu'il a référencé, voici un exemple qui comble certaines lacunes qui n'étaient pas claires pour moi.

Le fichier xaml:

<Window ...
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:p="clr-namespace:MyApp"
    Height="{Binding Source={x:Static p:MyAppSettings.Default}, Path=MainWndHeight, Mode=TwoWay}"
    Width="{Binding Source={x:Static p:MyAppSettings.Default}, Path=MainWndWidth, Mode=TwoWay}"
    Left="{Binding Source={x:Static p:MyAppSettings.Default}, Path=MainWndLeft, Mode=TwoWay}"
    Top="{Binding Source={x:Static p:MyAppSettings.Default}, Path=MainWndTop, Mode=TwoWay}"
    ...

Et le fichier source:

namespace MyApp
{
    class MainWindow ....
    {
        ...

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            MyAppSettings.Default.Save();
            base.OnClosing(e);
        }
    }

    public sealed class MyAppSettings : System.Configuration.ApplicationSettingsBase
    {
        private static MyAppSettings defaultInstance = ((MyAppSettings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new MyAppSettings())));
        public static MyAppSettings Default
        {
            get { return defaultInstance; }
        }

        [System.Configuration.UserScopedSettingAttribute()]
        [System.Configuration.DefaultSettingValueAttribute("540")]
        public int MainWndHeight
        {
            get { return (int)this["MainWndHeight"]; }
            set { this["MainWndHeight"] = value; }
        }

        [System.Configuration.UserScopedSettingAttribute()]
        [System.Configuration.DefaultSettingValueAttribute("790")]
        public int MainWndWidth
        {
            get { return (int)this["MainWndWidth"]; }
            set { this["MainWndWidth"] = value; }
        }

        [System.Configuration.UserScopedSettingAttribute()]
        [System.Configuration.DefaultSettingValueAttribute("300")]
        public int MainWndTop
        {
            get { return (int)this["MainWndTop"]; }
            set { this["MainWndTop"] = value; }
        }

        [System.Configuration.UserScopedSettingAttribute()]
        [System.Configuration.DefaultSettingValueAttribute("300")]
        public int MainWndLeft
        {
            get { return (int)this["MainWndLeft"]; }
            set { this["MainWndLeft"] = value; }
        }
    }
}

Dans la programmation WPF par Chris Sells & Ian Griffiths, il est dit

Le mécanisme de configuration préféré pour l'application WPF est celui fourni par .NET et VS: la classe ApplicationSettingBase de l'espace de noms System.Configuration avec le concepteur intégré.


Nous stockons le fichier de préférences ici:

Environment.SpecialFolder.ApplicationData

Stockez-le en tant que fichier "préférences" XML, il n'est donc pas si difficile d'y accéder et de le modifier si jamais il est corrompu.

Jusqu'à présent, cela a fonctionné beaucoup mieux que le registre pour nous, il est plus propre et plus facile à souffler si quelque chose est corrompu ou doit être réinitialisé.


Nous stockons tous dans le Isolation Storage (nous sommes en cours d'exécution avec ClickOnce). Nous avons un objet que nous sérialisons (XmlSerializer).


Semble perdre de la popularité pour une raison quelconque; mais le registre a toujours été un endroit approprié pour ce genre de configuration.





appsettings