Ответ 1
Вы можете привязать SelectedItem
из ComboBox
к свойству в вашей модели представления:
<ComboBox x:Name="CatalogName" ... SelectedItem="{Binding SelectedCatalog}" />
public class ShellViewModel : PropertyChangedBase
{
private string selectedCatalog;
public List<string> CatalogName
{
get
{
return new List<string> { "foo", "bar" };
}
}
public string SelectedCatalog
{
get
{
return this.selectedCatalog;
}
set
{
this.selectedCatalog = value;
this.NotifyOfPropertyChange(() => this.SelectedCatalog);
}
}
Фактически, поскольку ваш ComboBox
имеет имя CatalogName, соглашения Caliburn.Micro будут искать свойство SelectedCatalogName
(или ActiveCatalogName
) и автоматически связывать ComboBox
SelectedItem
с этим, поэтому вы можете использовать:
<ComboBox x:Name="CatalogName" ... />
public string SelectedCatalogName
{
...
}
Несколько замечаний:
- Мы вызываем
NotifyOfPropertyChange()
в установщике дляSelectedCatalog
. Это уведомляет пользовательский интерфейс, что значение изменилось всякий раз, когда мы устанавливаем его из модели представления, чтобы пользовательский интерфейс обновлялся. Этот метод является частьюPropertyChangedBase
. - Вы действительно должны использовать тип коллекции, который поддерживает сбор измененных уведомлений в ваших моделях просмотра, таких как
ObservableCollection
который поставляется с WPF, или Caliburn.MicroBindableCollection
(который реализует Caliburn.MicroIObservableCollection
). Это позволяет уведомлять пользовательский интерфейс, когда объекты добавляются/удаляются из ваших коллекций из модели представления. - Вероятно, ваша модель представления оболочки должна использовать тип
Screen
илиConductor
(а неPropertyChangedBase
), если он будет иметь жизненный цикл (активация/деактивация и т.д.) Или будет иметь текущий активный элемент (экран), который может измениться во время выполнения.