Как создать коллекцию для TabControl.ItemsSource из библиотеки классов, которая создается и используется в приложении? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть библиотека пользовательских классов с классами 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.

  1. Я могу использовать делегат Func <T, TResult> для создания коллекции в приложении, но могу ли я обойтись без нее?
  2. Теперь коллекция Pages находится в ShellViewModel. Кажется, мне понадобится эта коллекция в коллекцию подколлекций моделей представлений, а затем для каждого созданного MyTabControl в библиотеке, чтобы создать свою собственную подколлекцию. Но как тогда связать такую ​​вложенную коллекцию в xaml (<adc:MyTabControl ItemsSource="{Binding Pages}">)?

Скажите, пожалуйста, как решить эту проблему?

...