Хорошо, вот мой простой сценарий. У меня есть коллекция строк, которые я связываю с TabControl в качестве доказательства концепции. Когда я добавляю строки, я хочу новую вкладку с именем региона в качестве заголовка и ItemsControl в контейнере вкладок. Этот ItemsControl должен определять новый регион.
<TabControl x:Name="tabDemo" ItemsSource="{Binding DynamicRegions}" >
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ItemsControl cal:RegionManager.RegionName="{Binding}" ItemsSource="{x:Null}">
</ItemsControl>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
Оттуда я добавляю строки в коллекцию. Вкладки отображаются нормально, но при попытке позвонить
private void AddDynamicRegion(object arg)
{
var newRegionName = "Region" + (DynamicRegions.Count + 1).ToString();
DynamicRegions.Add(newRegionName);
}
private void AddRandomRegionContent(object arg)
{
if (string.IsNullOrEmpty(SelectedRegion) )
return;
Debug.WriteLine("Injected " + RegionContent + " into " + SelectedRegion);
var newContent = new TextBlock() { Text = RegionContent };
_regionManager.RegisterViewWithRegion(SelectedRegion,() => newContent );
_regionManager.Regions[SelectedRegion].Activate(newContent);
}
Выдает либо исключение, что регион не существует, либо исключение, при котором не удалось создать регион, и мой ItemsControl.ItemsSource уже установлен. Я действительно не ожидал, что это будет работать из коробки, но есть ли способ, которым я могу создать динамические области и внедрить их во время выполнения?
Обновление: вызов RegisterViewWithRegion фактически внедряет мой текстовый блок ... но при этом происходит странное поведение между вкладками.
Я изменил его, чтобы я мог выбрать регион и текст, который я хочу добавить. Это всегда работает для первого региона, который я создаю, но после этого переключение между вкладками просто показывает материал, который я добавил в первый регион. Элемент управления вкладками повторно использует мою таблицу данных на нескольких вкладках? Я включил весь свой код из ViewModel. DynamicRegions - это просто ObservableCollection