У меня есть библиотека пользовательских классов с классами MyTabItem, MyTabControl, MyGrid
. Когда вы перетаскиваете MyTabItem
(имеет значение ViewModel) на MyGrid
, запускается событие MyGrid_Drop
. На этом этапе создается MyTabControl
, и мне нужно создать коллекцию (ObservableCollection <ViewModelBase> Pages
) в пространстве имен приложения и указать ее в MyTabControl.ItemsSource
. После добавления MyTabItem
в эту коллекцию.
код в заявке:
public ObservableCollection<ViewModelBase> Pages { get; set; } = new ObservableCollection<ViewModelBase>();
код в библиотеке:
private void MyGrid_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetData(typeof(MyTabItem)) is MyTabItem tabItemSource)
{
if (InstanceTabControl.ItemsSource == null)
{
// Here I need to create a collection of ViewModels with the type as the TabItemSource.Content.
}
if (InstanceTabControl.ItemsSource is IList list)
{
var source = tabItemSource.Content;
list.Remove(source);
list.Add(source);
InstanceTabControl.SelectedIndex = list.Count - 1;
}
else
{
InstanceTabControl.Items.Remove(tabItemSource);
InstanceTabControl.Items.Add(tabItemSource);
InstanceTabControl.SelectedIndex = InstanceTabControl.Items.Count - 1;
}
}
}
По ссылка пример проекта PeopleDemo.
- Я могу использовать делегат
Func <T, TResult>
для создания коллекции в приложении, но могу ли я обойтись без нее?
- Теперь коллекция
Pages
находится в ShellViewModel
. Кажется, мне понадобится эта коллекция в коллекцию подколлекций моделей представлений, а затем для каждого созданного MyTabControl
в библиотеке, чтобы создать свою собственную подколлекцию. Но как тогда связать такую вложенную коллекцию в xaml (<adc:MyTabControl ItemsSource="{Binding Pages}">
)?
Скажите, пожалуйста, как решить эту проблему?