如何从应用程序中创建和使用的 class 库为 TabControl.ItemsSource 创建一个 collection?

How to create a collection for the TabControl.ItemsSource from the class library that is created and used in the application?

我有一个带有 类 MyTabItem, MyTabControl, MyGrid 的自定义 类 库。当您将 MyTabItem(具有 ViewModel 的值)拖到 MyGrid 上时,会触发 MyGrid_Drop 事件。此时,MyTabControl创建完成,我需要在应用程序命名空间中创建一个collection(ObservableCollection <ViewModelBase> Pages),并在MyTabControl.ItemsSource中指定。将 MyTabItem 添加到此 collection.

之后

应用程序中的代码:

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;
                }

            }
        }

通过 reference 示例项目 PeopleDemo。

  1. 我可以使用 Func <T, TResult> 委托在应用程序中创建一个 collection,但我可以不用它吗?
  2. 现在 Pages collection 在 ShellViewModel 中。看来我需要将此 collection 放入视图模型的 collection 个子 collection 中,然后为每个在库中创建的 MyTabControl 创建我自己的子 collection。但是如何在 xaml (<adc:MyTabControl ItemsSource="{Binding Pages}">) 中绑定这样一个 subcollection?

请指导我如何解决这个问题?

我解决了这个问题。在库中,我使用 ObservableCollection<object> Pages 集合。 MyTabControl 的每个实例都有自己的集合。 我可以通过泛型将类型传递给控制集合创建的 class。