HUSKING - kotteri

技術系Note

【XAMARIN】ピッカーの初期値

ピッカーの初期値を設定したくて悩んだ話



まず、以下のようにピッカーを準備

XAML
<Picker x:Name="picker" ItemDisplayBinding="{Binding Key}"/>
C#

ピッカー用のモデルクラス

using System;
namespace SimpleMemo
{
    public class PickerModel
    {
        public int Id { get; set; }
        public string Key { get; set; }
    }
}

ピッカーの中身を設定

// ピッカー用のリスト
ObservableCollection<PickerModel> Lists = new ObservableCollection<PickerModel>();

// ピッカーの中身をDBから取得
foreach (var row in db.Table<CategoryTable>().OrderBy(X => X.Id).ToList())
{
    Lists.Add(new PickerModel
    {
        Id = row.Id,
        Key = row.Key
    });
}

// ピッカーソース設定
this.picker.ItemsSource = this.Lists;

で、画面表示時にピッカーの初期値を設定したくて、悩んだ結果、以下のようにしました。

// ピッカー用のリストから、Id = 2のもののIndexを取得
var idx = this.Lists.Select((item, index) => 
    new { Index = index, Value = item })
    .Where(item => item.Value.Id == 2)
    .Select(item => item.Index);

// ピッカーの初期インデックスを設定
this.picker.SelectedIndex = idx.Single();


他に良い方法があれば、教えてください。。