Я почти уверен, что на это был дан ответ, но я не могу найти его для жизни.
Я пытаюсь использовать TabControl для переключения между UserControls (каждая вкладка отличается, поэтому не используя элементы)
Здесь разбивка: У меня есть мое основное представление и 3 пользовательских элемента управления. Mainview имеет элемент управления вкладкой - каждая вкладка должна отображать другой пользовательский элемент управления.
Я мог бы просто установить параметр tabcontrol для usercontrol, используя Но тогда это не связано с viewmodel, только вид.
Итак, я использую проводник в своей виртуальной машине и ActivateItem. Здесь, где он начинает становиться странным/расстраивающим. Приложение запускается с выбранным Tab0, но Tab2 (последняя вкладка). Нажмите на любую другую вкладку, загрузите правильную ViewModel для этой вкладки. Нажмите обратно на Tab0, загрузите там правильный контент.
Как мне это остановить? Кроме того, мне бы очень хотелось, чтобы при переключении вкладок снова не было повторно инициализировано viewmodel, очистка полей, которые уже были введены.
В любом случае, здесь некоторые из моих источников, я собираюсь просто отбросить это здесь и работать над чем-то еще, прежде чем я сломаю мышь.
Вид:
<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);
}
}