19 using System.Collections.Generic;
20 using System.Collections.ObjectModel;
21 using System.ComponentModel;
83 public class EnumProvider<T> : INotifyPropertyChanged where T: struct, IConvertible
85 #region Public properties 91 return _selectedItem.Value;
95 _selectedItem = GetViewModel(value);
96 AllPropertiesChanged();
104 return _selectedItem;
110 throw new ArgumentNullException(
111 "SelecteItem cannot be null because enums are not nullable.");
113 _selectedItem = value;
114 AllPropertiesChanged();
118 public string ToolTip
122 return SelectedItem.ToolTip;
129 public IEnumerable<EnumViewModel<T>> Choices
133 if (_choices == null)
135 _choices =
new Collection<EnumViewModel<T>>();
136 foreach (T member
in Enum.GetValues(typeof(T)))
140 GetDescription(member),
142 vm.PropertyChanged += EnumViewModel_PropertyChanged;
159 AsEnum = initialValue;
164 #region Virtual methods 178 Type type = typeof(T);
179 MemberInfo[] memberInfo = type.GetMember(member.ToString());
180 object[] attributes = memberInfo[0].GetCustomAttributes(
181 typeof(DescriptionAttribute),
false);
182 if (attributes.Length > 0 && attributes[0] is DescriptionAttribute)
184 return ((DescriptionAttribute)attributes[0]).Description;
188 return member.ToString();
206 void EnumViewModel_PropertyChanged(
object sender, PropertyChangedEventArgs e)
208 if (sender == SelectedItem)
210 OnPropertyChanged(
"SelectedItem");
212 OnPropertyChanged(
"Choices");
217 #region Public methods 228 return Choices.FirstOrDefault(item => item.Value.Equals(member));
233 #region Private methods 235 private void AllPropertiesChanged()
237 OnPropertyChanged(
"SelectedItem");
238 OnPropertyChanged(
"AsEnum");
239 OnPropertyChanged(
"Tooltip");
242 private void OnPropertyChanged(
string propertyName)
244 if (PropertyChanged != null)
246 PropertyChanged(
this,
new PropertyChangedEventArgs(propertyName));
252 #region INotifyPropertyChanged 254 public event PropertyChangedEventHandler PropertyChanged;
258 #region Private fields 261 private Collection<EnumViewModel<T>> _choices;
Facilitates WPF data binding to enums by providing an enumeration of Choices, read/write access to a ...
View model for enum members.
virtual string GetDescription(T member)
Returns a display string for a given enum value.
EnumViewModel< T > GetViewModel(T member)
Returns the view model for a given member.
virtual string GetTooltip(T member)
Returns a tooltip for the given enum member.