这就是我所拥有的。一个带有组合框和tabcontrol的主窗口,其视图模型附加了一个视图模型。 我有一个usercontrol与另一个viewmodel,这个usercontrol包含一个组合框和一个datagrid.Now当我从主组合框中选择一个项目时,viewmodel将计算在运行时需要生成多少个选项卡,并将usercontrol分配给每个tabitem 。我遇到的问题是,我无法绑定要在每个usercontrol选项卡项的组合框中填充的项目。以下是我的代码
MainWindow.xaml
<Window x:Class="TsstApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:TsstApp"
WindowState="Maximized"
Title="MainWindow" Height="1333" Width="1024">
<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>
<Grid>
<ComboBox HorizontalAlignment="Left" Margin="21,22,0,0" VerticalAlignment="Top"
Width="120" ItemsSource="{Binding Items}" DisplayMemberPath="ItemName" SelectedItem="
{Binding SelectedItem}"/>
<TabControl HorizontalAlignment="Left" Height="928" Margin="10,69,0,0"
VerticalAlignment="Top" Width="996" ItemsSource="{Binding TabData}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Tech}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<vm:TabItemControl/>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
以下是mainviewmodel
MainViewModel.cs
public class MainViewModel : ViewModelBase
{
private ItemCollection selectedItem;
public MainViewModel()
{
List<ItemCollection> ax = new List<ItemCollection>();
ax.Add(new ItemCollection() { ItemId = 0, ItemName = "Hair" });
ax.Add(new ItemCollection() { ItemId = 1, ItemName = "Fur" });
ax.Add(new ItemCollection() { ItemId = 2, ItemName = "Tail" });
this.Items = ax;
RaisePropertyChanged("Items");
this.SelectedItem = this.Items[0];
RaisePropertyChanged("SelectedItem");
}
public IList<ItemCollection> Items { get; set; }
public ItemCollection SelectedItem
{
get { return selectedItem ;}
set {
selectedItem = value;
RaisePropertyChanged("SelectedItem");
List<TabItemData> tabs = new List<TabItemData>();
switch(selectedItem.ItemName)
{
case "Hair":
for (int i = 0; i < 5;i++)
{
tabs.Add(new TabItemData() { TabId = i, TabName = "Hair"+i.ToString() });
}
break;
case "Fur":
for (int i = 0; i < 3; i++)
{
tabs.Add(new TabItemData() { TabId = i, TabName = "Fur" + i.ToString() });
}
break;
case "Tail":
for (int i = 0; i < 7; i++)
{
tabs.Add(new TabItemData() { TabId = i, TabName = "Tail" + i.ToString() });
}
break;
}
SelectedItem.TabData = tabs;
this.TabData = tabs.Select(t => new TabItemViewModel(t)).ToList();
RaisePropertyChanged("TabData");
}
}
public IList<TabItemViewModel> TabData { get; private set; }
}
以下是我的usercontrol
UserControl.xaml
<UserControl x:Class="TsstApp.TabItemControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:TsstApp"
mc:Ignorable="d"
d:DesignHeight="1333" d:DesignWidth="1024">
<UserControl.DataContext>
<vm:TabItemViewModel/>
</UserControl.DataContext>
<Grid>
<ComboBox HorizontalAlignment="Left" Margin="75,91,0,0" VerticalAlignment="Top"
Width="148" Height="27" ItemsSource="{Binding ReleaseItems}"
SelectedValuePath="ItemId" DisplayMemberPath="ItemName"/>
<TextBox HorizontalAlignment="Left" Height="31" Margin="75,183,0,0"
TextWrapping="Wrap" Text="{Binding TextContent}" VerticalAlignment="Top" Width="148"/>
</Grid>
</UserControl>
这是viewmodel
TabItemViewModel.cs
public class TabItemViewModel : ViewModelBase
{
public TabItemViewModel()
{
}
public TabItemViewModel(TabItemData t)
{
this.Tech = t.TabName;
List<TabReleases> az = new List<TabReleases>();
for(int i=0;i<10;i++)
{
az.Add(new TabReleases(){ReleaseId=i , ReleaseName=t.TabName + "-" + i.ToString()});
}
this.ReleaseItems = az;
}
public string Tech { get; set; }
public IList<TabReleases> ReleaseItems { get; set; }
}
现在,tabitem标题工作正常,正如你所看到的,我在mainwindows iteself中绑定了标题,但是usercontrol的组合框没有得到人工管理。
Kindlyhelp。
答案 0 :(得分:0)
我终于解决了。我只是做错了一件事。我在tabitemcontrol中添加了datacontect,但它不是必需的,因为mainwindows中的tabcontrol已经有itemsource,它为tabitemview模型创建了实例