如何从应用程序中创建和使用的 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。
- 我可以使用
Func <T, TResult>
委托在应用程序中创建一个 collection,但我可以不用它吗?
- 现在
Pages
collection 在 ShellViewModel
中。看来我需要将此 collection 放入视图模型的 collection 个子 collection 中,然后为每个在库中创建的 MyTabControl
创建我自己的子 collection。但是如何在 xaml (<adc:MyTabControl ItemsSource="{Binding Pages}">
) 中绑定这样一个 subcollection?
请指导我如何解决这个问题?
我解决了这个问题。在库中,我使用 ObservableCollection<object> Pages
集合。 MyTabControl 的每个实例都有自己的集合。
我可以通过泛型将类型传递给控制集合创建的 class。
我有一个带有 类 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。
- 我可以使用
Func <T, TResult>
委托在应用程序中创建一个 collection,但我可以不用它吗? - 现在
Pages
collection 在ShellViewModel
中。看来我需要将此 collection 放入视图模型的 collection 个子 collection 中,然后为每个在库中创建的MyTabControl
创建我自己的子 collection。但是如何在 xaml (<adc:MyTabControl ItemsSource="{Binding Pages}">
) 中绑定这样一个 subcollection?
请指导我如何解决这个问题?
我解决了这个问题。在库中,我使用 ObservableCollection<object> Pages
集合。 MyTabControl 的每个实例都有自己的集合。
我可以通过泛型将类型传递给控制集合创建的 class。