Добре, ето моят прост сценарий. Имам колекция от низове, които обвързвам към TabControl като доказателство за концепцията. Докато добавям низове, искам нов раздел с името на региона като заглавка и ItemsControl в контейнера Tab. Този 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