【发布时间】:2014-01-19 22:55:35
【问题描述】:
我很确定这已经在某个地方得到了回答,但我似乎一辈子都找不到它。
我正在尝试使用 TabControl 在 UserControls 之间切换(每个选项卡都不同,所以不使用 Items)
以下是细分: 我有我的主视图和 3 个用户控件。 Mainview 有一个选项卡控件 - 每个选项卡应显示不同的用户控件。
我可以轻松地将 tabcontrol contect 设置为 usercontrol 使用 但它并没有绑定到视图模型,只绑定到视图。
所以我在我的虚拟机中使用了 Conductor 和 ActivateItem。这就是它开始变得奇怪/令人沮丧的地方。应用程序从选择 Tab0 开始,但选择 Tab2(最后一个选项卡)内容。单击任何其他选项卡,为该选项卡加载正确的 ViewModel。点击返回 Tab0,在那里也加载正确的内容。
我怎样才能让它停止?另外,如果切换选项卡不会再次重新初始化视图模型,清除已经输入的字段,我会非常喜欢它。
无论如何,这是我的一些资源,我将把它放在这里,在我弄坏鼠标之前做点别的事情。
查看:
<TabControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row ="1">
<TabItem Header="PC Information">
<Grid>
<ContentControl x:Name="LoadRemoteInfo" cal:View.Model="{Binding ActiveItem}"/>
</Grid>
</TabItem>
<TabItem Header="Remote Tools">
<Grid>
<ContentControl x:Name="LoadRemoteTools" cal:View.Model="{Binding ActiveItem}"/>
</Grid>
</TabItem>
<TabItem Header="CHRemote">
<Grid>
<ContentControl x:Name="LoadCHRemote" cal:View.Model="{Binding ActiveItem}"/>
</Grid>
</TabItem>
</TabControl>
和 ViewModel:
class MainViewModel : Conductor<object>
{
RemoteInfoViewModel remoteInfo = new RemoteInfoViewModel();
RemoteToolsViewModel remoteTools = new RemoteToolsViewModel();
CHRemoteViewModel chRemote = new CHRemoteViewModel();
public MainViewModel()
{
ActivateItem(remoteInfo);
}
public void LoadRemoteInfo()
{
ActivateItem(remoteInfo);
}
public void LoadRemoteTools()
{
ActivateItem(remoteTools);
}
public void LoadCHRemote()
{
ActivateItem(chRemote);
}
}
【问题讨论】:
标签: c# wpf mvvm tabcontrol caliburn.micro