2017-11-24 16 views
0

に結合私はCaliburn.MicroCaliburn.Micro列挙型コンボボックス

XAMLとのコンボボックスにこれをバインドする方法を列挙

public enum FuelType 
{ 
    Diesel, 
    Petrol, 
    E10 
} 

あります<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)); 
     } 
    } 
+0

例:https://summergoat.wordpress.com/2008/07/08/enum-getvalues-markup-extension/ – Sybren

答えて

0

これを行う正しい方法は、アイテムのリストと選択されたアイテムを持つことですViewModelのアイテム。 Caliburn.Microの表記規則は、ItemsSource<x:Name>を使用)とSelectedItem(Selected<x:Name>を使用)の両方を解決するように設定されています。

のViewModel:

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のリンクを示唆して何をしない理由は、それがでMVVMの原則を破るということですViewコントロールデータを作成します。単純な列挙型のバッキングからデータベースをバックアップするビューに変更する場合、ビューが中断します。正しいアプローチで、ビューに触れることなくViewModelの型を変更することができます。ViewModelを破棄することなくViewを交換することもできます。