我有一个包含类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。
Func <T, TResult>
委托在应用程序中创建一个集合,但是如果没有它,我可以做吗?Pages
集合位于ShellViewModel
中。似乎我需要将此集合放入视图模型的子集合的集合中,然后针对库中每个创建的MyTabControl
创建我自己的子集合。但是,然后如何在xaml(<adc:MyTabControl ItemsSource="{Binding Pages}">
)中绑定这样的子集合呢?请指导我如何解决此问题?
我解决了这个问题。在库内部,我使用ObservableCollection<object> Pages
集合。 MyTabControl的每个实例都有其自己的集合。我可以通过泛型将类型传递给控制集合创建的类。