Обычно я устанавливаю значения по умолчанию в конструкторе, если для загрузки значений по умолчанию может потребоваться некоторое время, и в этом случае я установлю вызов метода, чтобы установить его в получателе для свойства bound.
Причиной этого является упрощение обслуживания. Если я ищу, где установить значение по умолчанию, чтобы я мог просмотреть или изменить его, первое, что я проверяю, - это конструктор. Его легче найти, чем прокручивать свойства, и, как известно, он содержит логику инициализации.
MyViewModel()
{
// Set defaults
SelectedColor = Brushes.Red;
}
Для свойств, загрузка которых может занять больше времени, я использую метод, который вызывается в получателе по той же причине. Как правило, все мои свойства и их методы получения / установки скрыты в регионе, и мне гораздо легче найти метод с именем LoadColors()
в моем классе, чем найти свойства Colors
в огромном списке свойств, которые у меня есть. Кроме того, его можно использовать повторно, поэтому, если мне нужно что-то сделать, например сбросить значение, это легко сделать без повторения моего кода.
ObservableCollection<SolidColorBrush> Colors
{
get
{
if (_colors == null)
LoadColors();
return _colors;
}
set { ... }
}
void LoadColors()
{
// Initialization logic here
}
Вы также можете установить значение по умолчанию в своем XAML, используя FallbackValue привязки, однако это обычно имеет смысл, только когда существует вероятность того, что привязка DataContext
не существует, когда оценивается привязка .
<!-- You may have to look up the exact syntax for Brushes.Red -->
<ListBox SelectedItem="{Binding SelectedColor, FallbackValue=Red}" />
И, наконец, что не менее важно, вы всегда можете прибегнуть к коду за представлением, чтобы выполнить логику, относящуюся к представлению, как в вашем примере. Например,
void ComboBox_Loaded(object obj, EventArgs e)
{
if (MyComboBox.SelectedIndex == -1)
MyComboBox.SelectedIndex = 2;
}