コンボボックスにドロップダウンアイテムにバインドする

コードビハインドで操作する場合はWinFormsとほぼ変わらない感じで実装できる。DataSourceがItemsSoueceになる程度。

// Window_Loadedなど
var result = lc.MstPrefectures.OrderBy(id => id.Id);

// ItemsSourceに直接セットする場合
ComboPref.DisplayMemberPath = "Pref";
ComboPref.SelectedValuePath = "Id";
ComboPref.ItemsSource = result.ToList();

ViewModelを使用する場合はObservableCollectionを使用すると内容変更で通知が発行される。Listなどを使うと内容変更での通知がされないので注意。

ObservableCollectionにはAddRangeがないのでforeachで回している。Removeも同様。全アイテム削除をするばあいはClearを使用する。

// ViewModel
private ObservableCollection<MstPrefecture> _comboPrefItems = new ObservableCollection<MstPrefecture>();
public ObservableCollection<MstPrefecture> ComboPrefItems
{
    get
    {
        return _comboPrefItems;
    }
    set
    {
        SetProperty(ref _comboPrefItems, value);
    }
}

// コンストラクタ
VM = new EditWindowViewModel();
DataContext = VM;

// Window_Loadedなど
// ViewModelにコレクションを用意している場合
var result = lc.MstPrefectures.OrderBy(id => id.Id);
foreach (var item in result)
{
    VM.ComboPrefItems.Add(item);
}

トップページ

コメント

タイトルとURLをコピーしました