এটি DevExpress
শীর্ষ-ভোট প্রাপ্ত উত্তরের ভিত্তিতে একটি নির্দিষ্ট উত্তর Gregor S.
(বর্তমানে এটির 128 ভোট রয়েছে)।
এর অর্থ আমরা পুরো অ্যাপ্লিকেশন জুড়ে স্টাইলিংটিকে সামঞ্জস্য রাখতে পারি:
দুর্ভাগ্যক্রমে, আসল উত্তরটি ComboBoxEdit
কিছু পরিবর্তন ছাড়াই ডিভ এক্সপ্রেস এর সাথে কাজ করে না ।
প্রথম, এর জন্য এক্সএএমএল ComboBoxEdit
:
<dxe:ComboBoxEdit ItemsSource="{Binding Source={xamlExtensions:XamlExtensionEnumDropdown {x:myEnum:EnumFilter}}}"
SelectedItem="{Binding BrokerOrderBookingFilterSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
DisplayMember="Description"
MinWidth="144" Margin="5"
HorizontalAlignment="Left"
IsTextEditable="False"
ValidateOnTextInput="False"
AutoComplete="False"
IncrementalFiltering="True"
FilterCondition="Like"
ImmediatePopup="True"/>
বলা বাহুল্য, আপনাকে নামস্পেসে নির্দেশ করতে হবে xamlExtensions
যাতে এক্সএএমএল এক্সটেনশন ক্লাস রয়েছে (যা নীচে সংজ্ঞায়িত করা হয়েছে):
xmlns:xamlExtensions="clr-namespace:XamlExtensions"
এবং আমাদের myEnum
নাম স্থানটি উল্লেখ করতে হবে যাতে এনাম রয়েছে:
xmlns:myEnum="clr-namespace:MyNamespace"
তারপরে, এনাম:
namespace MyNamespace
{
public enum EnumFilter
{
[Description("Free as a bird")]
Free = 0,
[Description("I'm Somewhat Busy")]
SomewhatBusy = 1,
[Description("I'm Really Busy")]
ReallyBusy = 2
}
}
এক্সএএমএল-এর সমস্যাটি হ'ল আমরা ব্যবহার করতে পারছি না SelectedItemValue
, কারণ সেটরটি অ্যাক্সেসযোগ্য না হওয়ায় এটি একটি ত্রুটি ছুঁড়ে ফেলেছে (আপনার অংশে একটি তদারকি করার জন্য DevExpress
)। সুতরাং ViewModel
অবজেক্ট থেকে সরাসরি মূল্য পেতে আমাদের আমাদের সংশোধন করতে হবে:
private EnumFilter _filterSelected = EnumFilter.All;
public object FilterSelected
{
get
{
return (EnumFilter)_filterSelected;
}
set
{
var x = (XamlExtensionEnumDropdown.EnumerationMember)value;
if (x != null)
{
_filterSelected = (EnumFilter)x.Value;
}
OnPropertyChanged("FilterSelected");
}
}
সম্পূর্ণতার জন্য, এখানে মূল উত্তর (সামান্য নামকরণ) থেকে এক্সএএমএল এক্সটেনশন দেওয়া হয়েছে:
namespace XamlExtensions
{
/// <summary>
/// Intent: XAML markup extension to add support for enums into any dropdown box, see http://bit.ly/1g70oJy. We can name the items in the
/// dropdown box by using the [Description] attribute on the enum values.
/// </summary>
public class XamlExtensionEnumDropdown : MarkupExtension
{
private Type _enumType;
public XamlExtensionEnumDropdown(Type enumType)
{
if (enumType == null)
{
throw new ArgumentNullException("enumType");
}
EnumType = enumType;
}
public Type EnumType
{
get { return _enumType; }
private set
{
if (_enumType == value)
{
return;
}
var enumType = Nullable.GetUnderlyingType(value) ?? value;
if (enumType.IsEnum == false)
{
throw new ArgumentException("Type must be an Enum.");
}
_enumType = value;
}
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
var enumValues = Enum.GetValues(EnumType);
return (
from object enumValue in enumValues
select new EnumerationMember
{
Value = enumValue,
Description = GetDescription(enumValue)
}).ToArray();
}
private string GetDescription(object enumValue)
{
var descriptionAttribute = EnumType
.GetField(enumValue.ToString())
.GetCustomAttributes(typeof (DescriptionAttribute), false)
.FirstOrDefault() as DescriptionAttribute;
return descriptionAttribute != null
? descriptionAttribute.Description
: enumValue.ToString();
}
#region Nested type: EnumerationMember
public class EnumerationMember
{
public string Description { get; set; }
public object Value { get; set; }
}
#endregion
}
}
দাবি অস্বীকার: ডিভ এক্সপ্রেসের সাথে আমার কোনও সম্পর্ক নেই। টেলরিকও একটি দুর্দান্ত পাঠাগার is