Ответ 1
Если вы действительно хотите сделать mvvm, попробуйте забыть "как я могу добавить элементы управления". вам не нужно, просто подумайте о своих моделях просмотра - WPF создаст для вас контуры:)
в вашем случае позволяет сказать, что у нас есть SearchViewModel и SearchEntryViewmodel.
public class SearchEntryViewmodel
{
//Properties for Binding to Combobox and Textbox goes here
}
public class SearchViewModel
{
public ObservableCollection<SearchEntryViewmodel> MySearchItems {get;set;}
public ICommand AddSearchItem {get;}
}
до сих пор вам не нужно думать о usercontrols/view. в вашем SearchView вы создаете элемент ItemsControl и привязываете ItemSource к MySearchItems.
<ItemsControl ItemsSource="{Binding MySearchItems}"/>
теперь вы видите все свои модели SearchEntryView в ItemsControl (просто atString() atm).
Чтобы соответствовать вашим требованиям, чтобы показать каждую модель SearchEntryView с помощью 3Combobox и т.д., вам просто нужно определить DataTemplate в своих ресурсах.
<DataTemplate DataType="{x:Type local:SearchEntryViewmodel}">
<StackPanel Orientation="Horizontal">
<Combobox ItemsSource="{Binding MyPropertyInSearchEntryViewmodel}"/>
<!-- the other controls with bindings -->
</StackPanel>
</DataTemplate>
thats all:), и вам никогда не придется думать о том, как я могу добавлять элементы управления динамически. вам просто нужно добавить новый SearchEntryViewmodel в свою коллекцию.
этот подход называется Viewmodel First, и я думаю, что это самый простой способ сделать MVVM.