Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

12 avril 2014 6 12 /04 /avril /2014 20:31

Soit une enum quelconque .Le but étant d’afficher la valeur de la description dans les contrôles de l’UI

public enum Status 
    {
        [Description("Mon état A")]
        StateA,
        [Description("Mon état B")]
        StateB
    }
On utilise un converter
       public class EnumDescriptionConverter : IValueConverter 
    {
        public object Convert(object value,Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null) return null;
            string description = GetDescription(value);
            return description;
        }
        public object ConvertBack(object value,Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }
        private static string GetDescription(object value)
        {
            FieldInfo field = value.GetType().GetField(value.ToString());
            DescriptionAttribute attribute = field.GetCustomAttribute(typeof(DescriptionAttribute), false) as DescriptionAttribute;
            string description = (attribute != null) ? attribute.Description : field.Name;
            return description;
        }
      }
Utilisation
J’ai un viewModel simple  et le DataContext de ma page réglé dessus.
  public class OrderViewModel :ViewModelBase 
    {
      private Status _orderStatus;
        public Status OrderStatus
        {
            get { return _oederStatus; }
            set 
            {
                _orderStatus = value;
                RaisePropertyChanged<Status>(() => OrderStatus);
            }
        }
    }
Pour afficher dans un contrôle de texte
    <Grid.Resources> 
            <converter:EnumDescriptionConverter x:Key="enumDescriptionConverter" />           
    </Grid.Resources>
<TextBlock Text="{Binding OrderStatus,Converter={StaticResource enumDescriptionConverter}}"/> 
Pour afficher dans une liste + sélection
<Grid.Resources> 
            <converter:EnumDescriptionConverter x:Key="enumDescriptionConverter" /> 
           
            <ObjectDataProvider x:Key="statusEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> 
                <ObjectDataProvider.MethodParameters> 
                    <x:Type Type="{x:Type local:Status}" /> 
                </ObjectDataProvider.MethodParameters> 
            </ObjectDataProvider>
           
            <DataTemplate x:Key="ItemTemplateCurrent">
                <TextBlock
                       Text="{Binding .,Converter={StaticResource enumDescriptionConverter}}" />
            </DataTemplate>
        </Grid.Resources>
        <ListBox ItemsSource="{Binding Source={StaticResource statusEnum}}"
                  SelectedValue="{Binding OrderStatus}"
                  ItemTemplate="{StaticResource ItemTemplateCurrent}" />

Partager cet article

Repost 0
Published by Romagny13 - dans MVVM
commenter cet article

commentaires