[WPF系列]-DataBinding 枚举类型数据源

时间:2023-03-09 15:08:17
[WPF系列]-DataBinding 枚举类型数据源
public class EnumerationDataProvider : ObjectDataProvider
{
public Type EnumerationType { get; set; } public string NoneValue { get; set; } public string NoneDisplayValue { get; set; } public EnumerationDataProvider()
{
this.MethodName = "GetEnumerations";
this.ObjectType = typeof(EnumerationHelper);
} protected override void EndInit()
{
this.MethodParameters.Clear();
this.MethodParameters.Add(this.EnumerationType);
this.MethodParameters.Add(this.NoneValue);
this.MethodParameters.Add(this.NoneDisplayValue); base.EndInit();
} private static class EnumerationHelper
{
private const string NoneDefaultValue = "None";
private const string NoneDisplayDefaultValue = ""; public static IDictionary<object, string> GetEnumerations(
Type enumType, string noneValue, string noneDisplayValue)
{
// Setup defaults if none exists.
if (string.IsNullOrWhiteSpace(noneValue)) noneValue = NoneDefaultValue;
if (string.IsNullOrWhiteSpace(noneDisplayValue)) noneDisplayValue = NoneDisplayDefaultValue; IDictionary<object, string> items = new Dictionary<object, string>(); // Find the None enumeration value.
string noneStringValue = (from n in Enum.GetNames(enumType)
where string.Compare(n, noneValue, StringComparison.OrdinalIgnoreCase) == 0
select n).FirstOrDefault(); bool hasNoneValue = !string.IsNullOrWhiteSpace(noneStringValue); object noneEnumerationValue = null;
if (hasNoneValue)
{
// Parse the None value if it exists and add it as the first item.
noneEnumerationValue = Enum.Parse(enumType, noneStringValue, true);
items.Add(noneEnumerationValue, noneDisplayValue);
} // Select all enumeration values where not equal to the None value and order by
// the enumeration value name.
var orderedEnums = from v in Enum.GetValues(enumType).Cast<object>()
where !v.Equals(noneEnumerationValue)
orderby Convert.ToString(v) select v; foreach (var value in orderedEnums)
items.Add(value, Convert.ToString(value)); return items;
}
}
}