दिलचस्प पोस्ट
पायथन में पृष्ठभूमि प्रक्रिया कैसे आरंभ करें? मैं पायथन में मॉनिटर रिज़ॉल्यूशन कैसे प्राप्त करूं? कैसे MVVM में एक PasswordBox के साथ बाध्य करने के लिए टॉमकेट में जड़ में अपने आवेदन को नियोजित करना सबसे बड़ा पूर्णांक जो एक डबल में संग्रहीत किया जा सकता है क्या हम इनबॉक्स में पहुंचने से पहले एंड्रॉइड में एक एसएमएस हटा सकते हैं? जांचें कि इनपुट स्ट्रिंग में जावास्क्रिप्ट में कोई संख्या है या नहीं सूची वस्तु की घटनाओं की गणना कैसे करें? Std :: cin से एक पासवर्ड पढ़ना कैसे php का उपयोग कर html से img src, title और alt निकालने के लिए? खंड और प्लेसहोल्डर में जावा के साथ दो तिथियों के बीच दिन की गणना क्या जावा ऑडियो के लिए पुस्तकालयों में निर्मित है _ सिंघेसिस_? मैं regex के साथ ओवरलैपिंग स्ट्रिंग का मिलान कैसे कर सकता हूं? नाम से कुकी प्राप्त करें

WPF में कंबोडिया नियंत्रण के लिए कैसे एक enum बाँध?

मैं एक सरल उदाहरण ढूंढने की कोशिश कर रहा हूं जहां के रूप में दिखाया गया है कि enums है। मैंने देखा है कि सभी उदाहरणों में अच्छे लग रहे प्रदर्शन तार जोड़ने की कोशिश की जाती है, लेकिन मुझे यह जटिलता नहीं चाहिए

असल में मेरे पास एक ऐसा वर्ग है जो सभी गुणों को मैं बाँध रखता है, जो पहले इस क्लास में डेटा कॉन्टेन्टेक्ट सेट करते हैं, और फिर इस तरह बाध्यकारी को xaml फ़ाइल में निर्दिष्ट करते हैं:

<ComboBox ItemsSource="{Binding Path=EffectStyle}"/> 

लेकिन यह आइटम के रूप में कॉम्बोबॉक्स में मान मान प्रदर्शित नहीं करता है।

वेब के समाधान से एकत्रित समाधान "WPF में कंबोडिया नियंत्रण के लिए कैसे एक enum बाँध?"

आप इसे विंडो Loaded ईवेंट हैंडलर में निम्न कोड डालकर कोड से कर सकते हैं, उदाहरण के लिए:

 yourComboBox.ItemsSource = Enum.GetValues(typeof(EffectStyle)).Cast<EffectStyle>(); 

यदि आपको इसे XAML में बाँधना है, तो वस्तु को बाध्यकारी स्रोत के रूप में उपलब्ध बनाने के लिए ऑब्जेक्टडेटाप्रॉवाइडर का उपयोग करने की आवश्यकता है:

 <Window x:Class="YourNamespace.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" xmlns:StyleAlias="clr-namespace:Motion.VideoEffects"> <Window.Resources> <ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="StyleAlias:EffectStyle"/> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> <Grid> <ComboBox ItemsSource="{Binding Source={StaticResource dataFromEnum}}" SelectedItem="{Binding Path=CurrentEffectStyle}" /> </Grid> </Window> 

अगले कोड पर ध्यान दें:

 xmlns:System="clr-namespace:System;assembly=mscorlib" xmlns:StyleAlias="clr-namespace:Motion.VideoEffects" 

गाइड कैसे नामस्थान और विधानसभा मैप करने के लिए आप MSDN पर पढ़ सकते हैं

मुझे अपने ऑब्जेक्ट्स के लिए पसंद है जो मेरे ViewModel में परिभाषित होने के लिए बाध्य है, इसलिए मैं <ObjectDataProvider> ऑब्जेक्टडेटाप्रदाता <ObjectDataProvider> का उपयोग करने से बचने की कोशिश करता हूं जब संभव हो तो xaml में

जब मैं Enum को एक ComboBox पर बाइंड करना चाहता हूं, तो मैं कभी भी ऐन्यू के मूल्यों से मेल नहीं खाता हूं, इसलिए मैं उस टेक्स्ट को देने के लिए उस विशेषता का उपयोग करता हूं जिसे मैं ComboBox में देखना चाहता हूं। यदि मेरे पास खेल में चरित्र वर्गों का एक बड़ा हिस्सा था, तो ऐसा कुछ दिखाई देगा:

 public enum PlayerClass { // add an optional blank value for default/no selection [Description("")] NOT_SET = 0, [Description("Shadow Knight")] SHADOW_KNIGHT, ... } 

सबसे पहले मैंने enums से निपटने के लिए कुछ तरीके के साथ सहायक वर्ग बनाया। एक विधि को विशिष्ट मूल्य के लिए एक विवरण मिलता है, अन्य विधि को एक प्रकार के सभी मान और उनके विवरण मिलते हैं।

 public static class EnumHelper { public static string Description(this Enum eValue) { var nAttributes = eValue.GetType().GetField(eValue.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false); if (nAttributes.Any()) return (nAttributes.First() as DescriptionAttribute).Description; // If no description is found, the least we can do is replace underscores with spaces // You can add your own custom default formatting logic here TextInfo oTI = CultureInfo.CurrentCulture.TextInfo; return oTI.ToTitleCase(oTI.ToLower(eValue.ToString().Replace("_", " "))); } public static IEnumerable<ValueDescription> GetAllValuesAndDescriptions(Type t) { if (!t.IsEnum) throw new ArgumentException("t must be an enum type"); return Enum.GetValues(t).Cast<Enum>().Select((e) => new ValueDescription() { Value = e, Description = e.Description() }).ToList(); } } 

अगला, हम एक ValueConverter बनाते हैं। MarkupExtension से MarkupExtension XAML में उपयोग करना आसान बनाता है इसलिए हमें इसे संसाधन के रूप में घोषित करने की आवश्यकता नहीं है।

 [ValueConversion(typeof(Enum), typeof(IEnumerable<ValueDescription>))] public class EnumToCollectionConverter : MarkupExtension, IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return EnumHelper.GetAllValuesAndDescriptions(value.GetType()); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } public override object ProvideValue(IServiceProvider serviceProvider) { return this; } } 

मेरे ViewModel केवल 1 प्रॉपर्टी की आवश्यकता होती है, जो कि मेरा View ItemsSource बॉक्स का ItemsSource और आइटम ItemsSource दोनों के लिए बाँध सकता है:

 private PlayerClass p_eClass; public PlayerClass SelectedClass { get { return p_eClass; } set { if (p_eClass != value) { p_eClass = value; OnPropertyChanged(nameof(SelectedClass)); } } } 

और अंत में ComboBox दृश्य ( ValueConverter बाध्यकारी में ValueConverter का उपयोग करके) को बाध्य करने के लिए …

 <ComboBox ItemsSource="{Binding Path=SelectedClass, Converter={x:EnumToCollectionConverter}, Mode=OneTime}" SelectedValuePath="Value" DisplayMemberPath="Description" SelectedValue="{Binding Path=SelectedClass}" /> 

इस समाधान को लागू करने के लिए आपको केवल अपने EnumHelper वर्ग और EnumToCollectionConverter वर्ग की प्रतिलिपि बनाने की आवश्यकता है। वे किसी भी एनोम के साथ काम करेंगे इसके अलावा, मैंने इसे यहां शामिल नहीं किया था, लेकिन ValueDescription क्लास सिर्फ 2 सार्वजनिक ऑब्जेक्ट गुणों के साथ एक साधारण वर्ग है, जिसे ValueDescription नामक, एक नाम दिया गया है। आप अपने आप को बना सकते हैं या आप Tuple<object, object> या Tuple<object, object> का उपयोग करने के लिए कोड को बदल सकते हैं।

मैं मार्कअप एक्स्टेंशन का उपयोग करते हुए एक अन्य समाधान का उपयोग किया।

  1. मैंने क्लास बनाया जो आइटमों को प्रदान करता है:

     public class EnumToItemsSource : MarkupExtension { private readonly Type _type; public EnumToItemsSource(Type type) { _type = type; } public override object ProvideValue(IServiceProvider serviceProvider) { return Enum.GetValues(_type) .Cast<object>() .Select(e => new { Value = (int)e, DisplayName = e.ToString() }); } } 
  2. यह लगभग सभी है … अब इसे एक्सएएमएल में उपयोग करें:

      <ComboBox DisplayMemberPath="DisplayName" ItemsSource="{persons:EnumToItemsSource {x:Type enums:States}}" SelectedValue="{Binding Path=WhereEverYouWant}" SelectedValuePath="Value" /> 
  3. बदलें 'enums: राज्यों' अपने enum करने के लिए

ObjectDataProvider का उपयोग करें:

 <ObjectDataProvider x:Key="enumValues" MethodName="GetValues" ObjectType="{x:Type System:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="local:ExampleEnum"/> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> 

और फिर स्थैतिक संसाधन से जुड़ें:

 ItemsSource="{Binding Source={StaticResource enumValues}}" 

आपको enum में मानों की एक सरणी बनाने की आवश्यकता होगी, जिसे सिस्टम। Ennum.GetValues ​​() पर कॉल करके बनाया जा सकता है, इसे एएनएम का Type देना जो आप की वस्तुओं चाहते हैं।

यदि आप ItemsSource संपत्ति के लिए यह निर्दिष्ट करते हैं, तो इसे सभी मानों के साथ पॉपुलेट किया जाना चाहिए। आप संभवत: SelectedItem हुए EffectStyle को EffectStyle (मानते हुए कि यह एक ही EffectStyle संपत्ति है, और इसमें मौजूदा मान शामिल है)।

निक के उत्तर ने वास्तव में मेरी मदद की है, लेकिन मुझे एहसास हुआ कि यह एक अतिरिक्त वर्ग, मूल्यवृष्टिकरण से बचने के लिए, थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-थोड़ी-कुछ हो सकती है मुझे याद आया कि पहले से ही ढांचे में एक महत्वपूर्ण मूल्य मौजूद है, इसलिए इसका उपयोग इसके बजाय किया जा सकता है

कोड केवल थोड़ा बदलता है:

 public static IEnumerable<KeyValuePair<string, string>> GetAllValuesAndDescriptions<TEnum>() where TEnum : struct, IConvertible, IComparable, IFormattable { if (!typeof(TEnum).IsEnum) { throw new ArgumentException("TEnum must be an Enumeration type"); } return from e in Enum.GetValues(typeof(TEnum)).Cast<Enum>() select new KeyValuePair<string, string>(e.ToString(), e.Description()); } public IEnumerable<KeyValuePair<string, string>> PlayerClassList { get { return EnumHelper.GetAllValuesAndDescriptions<PlayerClass>(); } } 

और अंत में एक्सएएमएल:

 <ComboBox ItemSource="{Binding Path=PlayerClassList}" DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding Path=SelectedClass}" /> 

मुझे उम्मीद है कि यह दूसरों के लिए उपयोगी है

उपरोक्त सभी पदों में एक साधारण चाल याद है आइटम्स संसाधनों को स्वचालित रूप से कैसे पॉप्यूलेट करने के लिए यह पता लगाने के लिए चयनित वैल्यू के बंधन से संभव है ताकि आपका एक्सएएमएल मार्कअप ठीक ही हो।

 <Controls:EnumComboBox SelectedValue="{Binding Fool}"/> 

उदाहरण के लिए मेरे ViewModel में मेरे पास है

 public enum FoolEnum { AAA, BBB, CCC, DDD }; FoolEnum _Fool; public FoolEnum Fool { get { return _Fool; } set { ValidateRaiseAndSetIfChanged(ref _Fool, value); } } 

मान्य राइस औरसेटअंकइ मेरा आईएनपीसी हुक है। तुम्हारा अलग हो सकता है

EnumComboBox के कार्यान्वयन इस प्रकार है, लेकिन पहले मुझे अपनी गणना स्ट्रिंग और मूल्य प्राप्त करने के लिए थोड़ा सहायताकर्ता चाहिए

  public static List<Tuple<object, string, int>> EnumToList(Type t) { return Enum .GetValues(t) .Cast<object>() .Select(x=>Tuple.Create(x, x.ToString(), (int)x)) .ToList(); } 

और मुख्य वर्ग (नोट: जब मैं किसी भी समय के माध्यम से संपत्ति में बदलाव करने के लिए ReactiveUI का उपयोग कर रहा हूँ)

 using ReactiveUI; using ReactiveUI.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Linq; using System.Windows; using System.Windows.Documents; namespace My.Controls { public class EnumComboBox : System.Windows.Controls.ComboBox { static EnumComboBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(EnumComboBox), new FrameworkPropertyMetadata(typeof(EnumComboBox))); } protected override void OnInitialized( EventArgs e ) { base.OnInitialized(e); this.WhenAnyValue(p => p.SelectedValue) .Where(p => p != null) .Select(o => o.GetType()) .Where(t => t.IsEnum) .DistinctUntilChanged() .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(FillItems); } private void FillItems(Type enumType) { List<KeyValuePair<object, string>> values = new List<KeyValuePair<object,string>>(); foreach (var idx in EnumUtils.EnumToList(enumType)) { values.Add(new KeyValuePair<object, string>(idx.Item1, idx.Item2)); } this.ItemsSource = values.Select(o=>o.Key.ToString()).ToList(); UpdateLayout(); this.ItemsSource = values; this.DisplayMemberPath = "Value"; this.SelectedValuePath = "Key"; } } } 

आपको जेनेरिक.एक्सएएमएल में शैली को सही ढंग से सेट करना होगा या आपका बॉक्स कुछ भी रेंडर नहीं करेगा और आप अपने बालों को बाहर खींच लेंगे।

 <Style TargetType="{x:Type local:EnumComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}"> </Style> 

और वह यही है यह स्पष्ट रूप से i18n का समर्थन करने के लिए बढ़ाया जा सकता है, लेकिन बाद में इस पद को बनायेगा

 public class EnumItemsConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (!value.GetType().IsEnum) return false; var enumName = value.GetType(); var obj = Enum.Parse(enumName, value.ToString()); return System.Convert.ToInt32(obj); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return Enum.ToObject(targetType, System.Convert.ToInt32(value)); } } 

यदि आपको एंबेम ऑब्जेक्ट मॉडल गुणों के लिए सीधे बाध्य कर रहे हैं, तो आपको इनर ऐम वैल्यू कन्वर्टर के साथ रोजर्स और ग्रेग का जवाब देना चाहिए।

यदि आप अपने ViewModel पर एक वास्तविक enum संपत्ति के लिए बाध्य हैं, enum का कोई int प्रतिनिधित्व नहीं, चीजें मुश्किल हो। मैंने पाया कि यह स्ट्रिंग का प्रतिनिधित्व करने के लिए बाध्य करने के लिए आवश्यक है, न कि अंतराल के सभी उदाहरणों में अपेक्षित मूल्य।

आप यह बता सकते हैं कि क्या वह संपत्ति है जिसे आप अपने व्यूमोल्ड पर बाध्य करना चाहते हैं, एक साधारण टेक्स्ट बॉक्स बाध्य करके ऐसा ही है। अगर यह पाठ दिखाता है, तो स्ट्रिंग से बाइंड करें। यदि यह एक नंबर दिखाता है, तो मान से बाइंड करें। नोट मैंने दो बार डिस्प्ले का उपयोग किया है, जो आमतौर पर एक त्रुटि होगी, लेकिन यह एकमात्र तरीका है जो काम करता है।

 <ComboBox SelectedValue="{Binding ElementMap.EdiDataType, Mode=TwoWay}" DisplayMemberPath="Display" SelectedValuePath="Display" ItemsSource="{Binding Source={core:EnumToItemsSource {x:Type edi:EdiDataType}}}" /> 

ग्रेग

यूनिवर्सल ऐप्स थोड़ा अलग तरीके से काम करने लगते हैं; इसमें पूर्ण विशेषताओं वाले एक्सएएमएल की सभी शक्ति नहीं है मेरे लिए क्या काम है:

  1. मैंने enum मानों की एक सूची enums (तार या पूर्णांक में परिवर्तित नहीं) के रूप में बनाई और कॉम्बो बॉक्स आइटमों को उस पर बाध्य किया
  2. तब मैं कॉम्बो बॉक्स आइटम को बाँध सकता था, मेरे सार्वजनिक संपत्ति के लिए चुने गए, जिसका प्रकार प्रश्न में एन्यूम है

बस मज़े के लिए मैंने इस के साथ मदद करने के लिए एक छोटे से टेम्पलटेड वर्ग को मार दिया और इसे एमएसडीएन नमूने पृष्ठों पर प्रकाशित किया। अतिरिक्त बिट मुझे ऐप्पल के नामों को वैकल्पिक रूप से ओवरराइड करने दें और मुझे कुछ एनोम को छिपाने दें। मेरा कोड निक की तरह एक भयानक लग रहा है (ऊपर), जो मुझे लगता है कि मैंने पहले देखा था।

नमूना चलाना; यह enum में कई दो बार बाइंडिंग शामिल है

मुझे tom.murska का जवाब पसंद आया, लेकिन मुझे किसी भी एएनयूम प्रकार का समर्थन करने की आवश्यकता थी, जो कि मेरे टेंप्लेट को रनटाइम पर सामना हो सकता है। इसके लिए, मुझे मार्कअप एक्सटेंशन के लिए प्रकार निर्दिष्ट करने के लिए बाध्यकारी का उपयोग करना पड़ा। मैं इस उत्तर में निकोलए। युनिकिनेको से एक बहुत ही लचीला मार्कअप एक्सटेंशन के साथ काम करने में सक्षम था जो कि किसी भी मामले में मैं सोच सकता हूँ। यह इस तरह से खाया जाता है:

 <ComboBox SelectedValue="{Binding MyEnumProperty}" SelectedValuePath="Value" ItemsSource="{local:EnumToObjectArray SourceEnum={Binding MyEnumProperty}}" DisplayMemberPath="DisplayName" /> 

उपर्युक्त मैश अप मार्कअप एक्सटेंशन का स्रोत:

 class EnumToObjectArray : MarkupExtension { public BindingBase SourceEnum { get; set; } public override object ProvideValue(IServiceProvider serviceProvider) { IProvideValueTarget target = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget; DependencyObject targetObject; DependencyProperty targetProperty; if (target != null && target.TargetObject is DependencyObject && target.TargetProperty is DependencyProperty) { targetObject = (DependencyObject)target.TargetObject; targetProperty = (DependencyProperty)target.TargetProperty; } else { return this; } BindingOperations.SetBinding(targetObject, EnumToObjectArray.SourceEnumBindingSinkProperty, SourceEnum); var type = targetObject.GetValue(SourceEnumBindingSinkProperty).GetType(); if (type.BaseType != typeof(System.Enum)) return this; return Enum.GetValues(type) .Cast<Enum>() .Select(e => new { Value=e, Name = e.ToString(), DisplayName = Description(e) }); } private static DependencyProperty SourceEnumBindingSinkProperty = DependencyProperty.RegisterAttached("SourceEnumBindingSink", typeof(Enum) , typeof(EnumToObjectArray), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits)); /// <summary> /// Extension method which returns the string specified in the Description attribute, if any. Oherwise, name is returned. /// </summary> /// <param name="value">The enum value.</param> /// <returns></returns> public static string Description(Enum value) { var attrs = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false); if (attrs.Any()) return (attrs.First() as DescriptionAttribute).Description; //Fallback return value.ToString().Replace("_", " "); } } 

मैं अपनी टिप्पणी जोड़ रहा हूं (दुर्भाग्य से, वीबी में, लेकिन इस अवधारणा को धीरे-धीरे दिल की धड़कन में सी # पर दोहराया जा सकता है), क्योंकि मुझे इसका संदर्भ देना था और मुझे कोई भी जवाब पसंद नहीं था क्योंकि वे बहुत जटिल थे। यह इस कठिन होना चाहिए नहीं होना चाहिए

इसलिए मैं एक आसान तरीका के साथ आया था। गणक को एक शब्दकोश में बाँधें उस डिक्शनरी को कंबाबॉक्स में बांधाएं

मेरा कंघीबोक्स:

 <ComboBox x:Name="cmbRole" VerticalAlignment="Stretch" IsEditable="False" Padding="2" Margin="0" FontSize="11" HorizontalAlignment="Stretch" TabIndex="104" SelectedValuePath="Key" DisplayMemberPath="Value" /> 

मेरा कोड-पीछे उम्मीद है, यह किसी और को मदद करता है

  Dim tDict As New Dictionary(Of Integer, String) Dim types = [Enum].GetValues(GetType(Helper.Enumerators.AllowedType)) For Each x As Helper.Enumerators.AllowedType In types Dim z = x.ToString() Dim y = CInt(x) tDict.Add(y, z) Next cmbRole.ClearValue(ItemsControl.ItemsSourceProperty) cmbRole.ItemsSource = tDict 

ReactiveUI का उपयोग करना, मैंने निम्न वैकल्पिक समाधान बनाया है यह एक सुरुचिपूर्ण सभी-एक-एक समाधान नहीं है, लेकिन मुझे लगता है कि बहुत कम से कम यह पठनीय है।

मेरे मामले में, नियंत्रण के लिए enum की एक सूची बाध्यकारी एक दुर्लभ मामला है, इसलिए मुझे कोड बेस में समाधान पैमाने पर करने की आवश्यकता नहीं है। हालांकि, कोड को Object में EffectStyleLookup.Item को बदलकर अधिक सामान्य बनाया जा सकता है। मैंने इसे अपने कोड के साथ परीक्षण किया, कोई अन्य संशोधन आवश्यक नहीं है इसका अर्थ है कि किसी सहायक श्रेणी को किसी भी enum सूची में लागू किया जा सकता है। हालांकि इसकी पठनीयता कम हो सकती है – ReactiveList<EnumLookupHelper> इसके लिए एक महान रिंग नहीं है

निम्न सहायक वर्ग का उपयोग करना:

 public class EffectStyleLookup { public EffectStyle Item { get; set; } public string Display { get; set; } } 

ViewModel में, enums की सूची परिवर्तित करें और इसे एक संपत्ति के रूप में उजागर करें:

 public ViewModel : ReactiveObject { private ReactiveList<EffectStyleLookup> _effectStyles; public ReactiveList<EffectStyleLookup> EffectStyles { get { return _effectStyles; } set { this.RaiseAndSetIfChanged(ref _effectStyles, value); } } // See below for more on this private EffectStyle _selectedEffectStyle; public EffectStyle SelectedEffectStyle { get { return _selectedEffectStyle; } set { this.RaiseAndSetIfChanged(ref _selectedEffectStyle, value); } } public ViewModel() { // Convert a list of enums into a ReactiveList var list = (IList<EffectStyle>)Enum.GetValues(typeof(EffectStyle)) .Select( x => new EffectStyleLookup() { Item = x, Display = x.ToString() }); EffectStyles = new ReactiveList<EffectStyle>( list ); } } 

ComboBox , मूल enum मान से बाइंड करने के लिए SelectedValuePath गुण का उपयोग करें:

 <ComboBox Name="EffectStyle" DisplayMemberPath="Display" SelectedValuePath="Item" /> 

व्यू में, यह हमें मूल enum को enum में SelectedEffectStyle में बाइंड करने की अनुमति देता है, लेकिन ComboBox में ToString() मान प्रदर्शित करता है:

 this.WhenActivated( d => { d( this.OneWayBind(ViewModel, vm => vm.EffectStyles, v => v.EffectStyle.ItemsSource) ); d( this.Bind(ViewModel, vm => vm.SelectedEffectStyle, v => v.EffectStyle.SelectedValue) ); });