如何从在应用程序中创建和使用的类库为TabControl.ItemsSource创建一个集合?

问题描述 投票:0回答:1

我有一个包含类MyTabItem, MyTabControl, MyGrid的自定义类库。在MyTabItem上拖动MyGrid(具有ViewModel的值)时,将触发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;
                }

            }
        }

通过reference示例项目PeopleDemo。

  1. 我可以使用Func <T, TResult>委托在应用程序中创建一个集合,但是如果没有它,我可以做吗?
  2. 现在Pages集合位于ShellViewModel中。似乎我需要将此集合放入视图模型的子集合的集合中,然后针对库中每个创建的MyTabControl创建我自己的子集合。但是,然后如何在xaml(<adc:MyTabControl ItemsSource="{Binding Pages}">)中绑定这样的子集合呢?

请指导我如何解决此问题?

c# wpf mvvm custom-controls itemssource
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.