tmytのらくがき

個人の日記レベルです

ComboBoxにBindingしたらクラッシュして悩んでた

こういうクラスがあったとして、

class Config
{
    private T GetValue<T>([CallerMemberName] string name = null)
    {
        var values = ApplicationData.Current.RoamingSettings.Values;
        if (values.ContainsKey(name)) return (T)values[name];
        return default(T);
    }
    
    public int Index { get { return GetValue<int>(); } set { SetValue(value); OnPropertyChanged(); } }
}

XAMLをこういう感じで書くと、

<Page>
    <Page.Resources>
        <local:Config x:Key="Config" />
    </Page.Resources>
    
    <ComboBox SelectedIndex="{Binding Source={StaticResources Config},Path=Index,Mode=TwoWay}" />
</Page>

InitializeComponent() で例外で死ぬので悩んでました。

結局、default(T)が0になって、ComboBoxの中身が0なので値の範囲は-1のみ。そこに0を入れたことで、値が範囲外なので例外。ということでした。

これが、IndexOutOfRangeException とか投げてくれるならすぐにわかるのに、XamlParseExceptionなんて投げるもんだから原因がさっぱり。1時間半ぐらい悩んでました。