У меня есть вид OutputOptionsView
, который содержит несколько UserControls
с настройками параметров, которые отображаются в зависимости от выбора в выпадающем списке.
Я создаю Datacontext
и Datatemplates
для UserControls
в OutputOptionsView
следующим образом:
<UserControl.Resources>
<ResourceDictionary>
<local:OutputOptionsViewModel x:Key="vm" />
<DataTemplate x:Key="OptionSettings1" DataType="{x:Type views:OptionSettings1View}">
<views:OptionSettings1View />
</DataTemplate>
<DataTemplate x:Key="OptionSettings2" DataType="{x:Type views:OptionSettings2View}">
<views:OptionSettings2View />
</DataTemplate>
....
</ResourceDictionary>
</UserControl.Resources>
Отображение OptionSettingsViews
обрабатывается следующим образом:
<ContentControl Name="OutputOptionsContentControl" Content="{Binding}" >
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource OptionSettings1}" />
<Style.Triggers>
<DataTrigger Binding="{Binding AvailableOptionsListSelectedIndex}" Value="1">
<Setter Property="ContentTemplate" Value="{StaticResource OptionSettings2}" />
</DataTrigger>
...
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
ItemsSource
и SelectedIndex
ComboBox связаны с классом модели представления OutputOptionsViewModel
OutputOptionsView
:
<ComboBox Name="AvailableOptionsListComboBox" ItemsSource="{Binding AvailableOptionsList}" DisplayMemberPath="OptionTitle"
SelectedIndex="{Binding AvailableOptionsListSelectedIndex, UpdateSourceTrigger=PropertyChanged}"/>
Каждый мой OptionSettings
вид также получает ViewModel:
<UserControl.Resources>
<ResourceDictionary>
<local:OptionSettings1ViewModel x:Key="vm" />
</ResourceDictionary>
</UserControl.Resources>
<Grid DataContext="{StaticResource vm}">
...
</Grid>
Теперь моя проблема касается населения из списка. Я создал интерфейс, содержащий OptionTitle, который наследуется каждым OptionsSettingsViewModels
. AvailableOptionsList
, который является ItemsSouce
для выпадающего списка, является списком этого интерфейса.
public List<IOutputOption> AvailableOptionsList { get; set; }
Он будет создан в конструкторе класса OutputOptionsViewModel
.
Внутри каждого из OptionSettingsViewModel
конструкторов класса я добавляю соответствующий OptionsSettingsViewModel
в этот список:
public OptionSettings1ViewModel()
{
OutputOptionsViewModel.AvailableOptionsList.Add(this);
}
Это приводит к следующей проблеме: поле со списком не заполняется, пока не создаются экземпляры OptionSettingsView, но они не могут быть созданы, потому что их нельзя выбрать из пустого поля со списком.
Поэтому я пытаюсь форсировать реализацию OptionSettingsViews.