C# 如何在不按下按钮的情况下通过c代码在内容控件之间切换?
我有一个c#应用程序(wpf、mvvm)。我有3个单选按钮,描述了3个垂直选项卡,每个选项卡都有一个命令(ICommand)来显示一个内容控件(视图),它也是用XAML表示的。c代码中的控件之间的切换是通过一个视图来完成的。可见性=可见,其他视图-隐藏。单击选项卡时,所有操作都很好。 但是,我现在想在一个特定的不活动超时后——切换到“主”内容控件,但运气不好。计时器正确超时,并且在TimeRecursed时,我使用使此Home内容控件可见和隐藏其他内容控件的函数(就像我选择此选项卡时所做的那样),但内容控件不会更改C# 如何在不按下按钮的情况下通过c代码在内容控件之间切换?,c#,wpf,mvvm,contentcontrol,C#,Wpf,Mvvm,Contentcontrol,我有一个c#应用程序(wpf、mvvm)。我有3个单选按钮,描述了3个垂直选项卡,每个选项卡都有一个命令(ICommand)来显示一个内容控件(视图),它也是用XAML表示的。c代码中的控件之间的切换是通过一个视图来完成的。可见性=可见,其他视图-隐藏。单击选项卡时,所有操作都很好。 但是,我现在想在一个特定的不活动超时后——切换到“主”内容控件,但运气不好。计时器正确超时,并且在TimeRecursed时,我使用使此Home内容控件可见和隐藏其他内容控件的函数(就像我选择此选项卡时所做的那样)
`<StackPanel Orientation="Vertical" Grid.Row="1" Margin="0,85,0,0">
<RadioButton Content="{l:Translation HomePage}"
IsChecked="{Binding IsHomeMode, Mode=OneWay, FallbackValue=True}"
Style="{StaticResource LeftNavigation_ToggleButtonStyle}"
Command="{Binding ShowHomePageCommand}"/>
<RadioButton Content="{l:Translation PatientList}"
Style="{StaticResource LeftNavigation_ToggleButtonStyle}"
Command="{Binding ShowAllCustomersCommand}"/>
<RadioButton Content="{l:Translation ResumeSession}"
Style="{StaticResource LeftNavigation_ToggleButtonStyle}"
Command="{Binding ShowAllSessionsCommand}"/>
</StackPanel>`
<Grid>
<ContentControl Content="{Binding SessionsHistoryView}"/>
<ContentControl Content="{Binding HomepageView}"/>
</Grid>
`
`
绑定到视图意味着ViewModel包含属性,而不是MVVM方式。有一个更好的方法:
ViewModel
private object _currentPage;
public object CurrentPage
{
get { return _currentPage; }
set
{
_currentPage = value;
OnPropertyChanged(nameof(CurrentPage));
}
}
<ContentControl Content="{Binding CurrentPage}"/>
ResourceDictionary
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Views.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
ViewModel
设置为CurrentPage
属性。您可以在此处添加超时或任何其他逻辑。更喜欢异步执行命令请给我们您的代码样本,似乎不起作用。我无法附加代码。。不带4个空格或“.”@KrzysztofMańkowski,我添加了相关的XAML代码。在C#代码中,我只创建了一个ICommand,在其中我将显示每个内容控件(Visibility.Visible和Vidden)的函数作为参数发送。感谢@Andrey Alonzov,将ContentControl绑定更改为一个活动视图,并处理ViewModel内部的逻辑是解决方案的关键。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Views.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>