मेरे पास एक एनम है

    public enum FuelType
{
    Diesel,
    Petrol,
    E10
}

मैं इसे कैलिबर्न के साथ एक Combobox से कैसे बांध सकता हूं

एक्सएमएल: <ComboBox x:Name="Fuel" Grid.Row="5" Grid.Column="2" Margin="3"/>

और ModelView में संपत्ति:

        public FuelType Fuel
    {
        get { return _fuel; }
        set
        {
            _fuel = value;
            NotifyOfPropertyChange(nameof(Fuel));
        }
    }
1
Steini 25 नवम्बर 2017, 01:28

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा करने का सही तरीका है कि ViewModel में आइटम्स की सूची और चयनित आइटम का होना। Caliburn.Micro में सम्मेलनों को ItemsSource (<x:Name> का उपयोग करके) और SelectedItem (Selected<x:Name> का उपयोग करके) दोनों को हल करने के लिए स्थापित किया गया है।

व्यूमॉडल:

internal class FuelViewModel : Screen
{
    public FuelViewModel()
    {
        FuelType = Enum.GetValues(typeof(Fueltype)).Cast<Fueltype>().ToList();
    }

    private Fueltype selectedFuelType;

    public Fueltype SelectedFuelType
    {
        get => selectedFuelType;
        set => Set(ref selectedFuelType, value);
    }

    public IReadOnlyList<Fueltype> FuelType { get; }
}

देखें:

    <ComboBox x:Name="FuelType"/>

संपादित करें:
Sybren के लिंक से जो पता चलता है, उसे न करने का कारण यह है कि यह व्यू कंट्रोल डेटा बनाकर एमवीवीएम सिद्धांतों को तोड़ता है। यदि आप अपने व्यू ब्रेक का समर्थन करने वाले डेटाबेस में एक साधारण एनम बैकिंग से बदलना चाहते थे। सही दृष्टिकोण के साथ आप व्यूमोडेल में दृश्य को स्पर्श किए बिना प्रकार बदल सकते हैं और आप व्यूमोडेल को तोड़े बिना व्यू का आदान-प्रदान भी कर सकते हैं।

2
Mirco Gericke 25 नवम्बर 2017, 02:49