Combobox не устанавливает значение по умолчанию, если значение является перечислением
У меня есть поле со списком, где я предоставляю параметры и значение для установки из моего контекста данных. XAML выглядит так:
<ComboBox HorizontalAlignment="Left" Width="120"
ItemsSource="{Binding Options}"
DisplayMemberPath="Text"
SelectedValuePath="OptionValue"
SelectedValue="{Binding Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
Если Value и OptionValue являются int в моем тексте данных, все работает нормально. Пример:
public class MyDataContext : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public class TextValue
{
private string _Text;
private int _Value;
public TextValue(string text, int value)
{
_Text = text;
_Value = value;
}
public int OptionValue
{
get
{
return _Value;
}
}
public string Text
{
get
{
return _Text;
}
}
}
private TextValue[] _Options = new TextValue[]
{
new TextValue("One", 1),
new TextValue("Two", 2),
new TextValue("Three", 3)
};
public TextValue[] Options
{
get
{
return _Options;
}
}
private int _Value = 1;
public int Value
{
get
{
return _Value;
}
set
{
if (_Value != value)
{
System.Diagnostics.Debug.WriteLine("New value set: " + value);
_Value = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
}
}
}
}
Но если вместо Value и OptionValue задано enum, значение по умолчанию в поле со списком не устанавливается. Если я изменю параметр в поле со списком, то значение будет установлено, поэтому я предполагаю, что привязка данных работает. Почему это так? Это странное поведение имеет место только в приложениях Магазина Windows, если при запуске в приложении WPF то же самое работает нормально. Enum-код:
public class MyDataContext : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public enum Number { One, Two, Three }
public class TextValue
{
private string _Text;
private Number _Value;
public TextValue(string text, Number value)
{
_Text = text;
_Value = value;
}
public Number OptionValue
{
get
{
return _Value;
}
}
public string Text
{
get
{
return _Text;
}
}
}
private TextValue[] _Options = new TextValue[]
{
new TextValue("One", Number.One),
new TextValue("Two", Number.Two),
new TextValue("Three", Number.Three)
};
public TextValue[] Options
{
get
{
return _Options;
}
}
private Number _Value = Number.One;
public Number Value
{
get
{
return _Value;
}
set
{
if (_Value != value)
{
System.Diagnostics.Debug.WriteLine("New value set: " + value);
_Value = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
}
}
}
}