WPF / mvvm中的动态选项卡控件

时间:2010-10-04 22:45:57

标签: wpf mvvm tabcontrol

我正在关注wpf / mvvm方法。我需要一个标签控件...有多行...我的意思是父/子行。当用户单击选项卡时,应显示其下的所有子选项卡...但只应加载一个子选项卡下的页面。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

是的,您可以通过将选项卡Control中的SelectedTabIndex属性绑定到ViewModel中的字符串来实现。 (因此,整个过程就在于如何在ViewModel中设计数据结构。)

关于选择Tab时加载Tab内容:

最初,您可以从ViewModel调用服务并获取选项卡数量,将其填充到Observable集合并将选项卡绑定到集合。您可以在ViewModel中拥有一个名为SelectedTab的属性,其值为-1。现在,在获得选项卡数量并将这些选项卡绑定到选项卡控件(我没有加载选项卡的内容;只显示选项卡)之后,您可以设置SelectedTab = 0,并且在setter中您可以传递TabId和加载Tab的数据。

private string selectedTab = -1;
public string SelectedTab 
{
    get { return selectedTab; }
    set { 
           selectedTab = value;
           LoadTabContent(selectedTab);
           OnPropertyChanged("SelectedTab"); // I have implemented INotifyPropertyChanged event
        }
}

但请确保您没有太多选项卡因为应用程序执行得非常糟糕,每个选项卡中包含太多选项卡和太多数据,因为每次选择不同的选项卡时,WPF都会从可视树中清除旧选项卡的内容

答案 1 :(得分:-1)

修改

您应该持有一个父标签,该标签将保留标签并绑定到此集合

问题出在哪里 public ObservableCollection> MyCollection {get;组;你必须在同一时间把它们全部拿走。

因此我建议你举行

IEnumerable _modules

每次加载antoher选项卡时,您都会动态地执行IEnumerable _modules 清楚(你可以通过使用触发器和命令来实现)你可以为每个项目调用dispoe

希望这次我理解你