こういうクラスがあったとして、
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時間半ぐらい悩んでました。