繁体   English   中英

以编程方式将新的Datagrid(或其他UserControll)添加到以编程方式生成的TabItem中(使用mvvm)

[英]Programmatically add new Datagrid (or other UserControll) into a programmatically generated TabItem (using mvvm)

我有一个带有TabControl的XAML代码,其中包含2个选项卡(选项卡A和选项卡B)。 在选项卡AI可以为选项卡B进行配置中,因此选项卡B可以依赖于选项卡A进行动态更改。选项卡B包含静态的Tabcontroll,未实现任何选项卡(因为稍后将生成选项卡)。 注意:“ Tab A”和“ Tab B”是主选项卡,“ Tab C”,“ Tab D”等是“ Tab B”的子选项卡。

这是我的XAML代码:

<TabItem Header="TAB_B">
            <Grid>
                <TabControl ItemsSource="{Binding MyTabItems, UpdateSourceTrigger=PropertyChanged}">
                        <TabControl.ItemTemplate>
                            <DataTemplate>
                                <!-- here I want to show a Datagrid for each new Tab ("Tab C", "Tab D", ...) -->
                            </DataTemplate>                            
                        </TabControl.ItemTemplate>
                </TabControl>
            </Grid>
        </TabItem>

在我的ViewModel中,我具有绑定属性:

    private ObservableCollection<TabItem> _myTabItems;
    public ObservableCollection<TabItem> MyTabItems
    {
        get { return _myTabItems; }
        set
        {
            _myTabItems = value;
            OnPropertyChanged("MyTabItems");
        }
    }

在我的Viewmodel中,有一个方法可以在Tab B的TabController中构建Tab项目:

    public void BuildContentOfTabB()
    {
        foreach (var item in myTabList)
        {
                MyTab = new TabItem();
                MyTab.Header = myHeaderString; // e.g. "Tab C", "Tab D"
                MyTabItems.Add(MyTab);
            }
        }
    }

这很好。 我在TabController中获得了新的TabItems(“ Tab C”,“ Tab D”等)。 现在,我想在“ Tab C”或“ Tab D”中获得新的UserControlls,例如Datagrid。 我不知道如何解决我的问题。 感谢您的回答。

为您的视图模型创建基类:

public abstract class BaseVM {}

而不是修改MyTabItem属性:

public ObservableCollection<BaseVM> MyTabItems...

创建从BaseVM继承的自定义视图BaseVMpublic class DatagridVM:BaseVM
您的tabControl为:

<TabControl ItemsSource="{Binding MyTabItems}">
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <ContentControl Content="{Binding}"/>
                </DataTemplate>
            </TabControl.ContentTemplate>
</TabControl>

在ResourceDictionary中定义视图模型的视图:

<DataTemplate DataType="{x:Type vm:DatagridVM}">
    <Datagrid/>
</DataTemplate>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM