我有一个c#应用程序(wpf,mvvm)。我有3个单选按钮,描述3个垂直选项卡,每个选项卡都有一个命令(ICommand)来显示内容控件(视图),这也在XAML中说明。 c#代码中控件之间的切换是通过制作一个视图来完成的。可见性=可见,其他 - 隐藏。单击选项卡时一切正常。 但是,我现在想要在特定的不活动超时后 - 切换到“Home”内容控件,但没有运气。计时器正常超时,并且在timerElapsed上,我进入使该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>
答案 0 :(得分:0)
绑定到View意味着您的ViewModel包含属性,并且它不是MVVM方式。有一种更好的方法:
在您的父ViewModel
中定义CurrentPage属性。
private object _currentPage;
public object CurrentPage
{
get { return _currentPage; }
set
{
_currentPage = value;
OnPropertyChanged(nameof(CurrentPage));
}
}
仅绑定一个内容控件
<ContentControl Content="{Binding CurrentPage}"/>
为DataTemplate
ViewModel
创建ResourceDictionary
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1">
<DataTemplate DataType="{x:Type local:HomePageViewModel}">
<!--View definition goes here-->
</DataTemplate>
</ResourceDictionary>
在您的应用程序词典或任何需要的地方注册ResourceDictionary
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Views.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
在命令实现中将必需的ViewModel
设置为CurrentPage
属性。您可以在此处添加超时或任何其他逻辑。首选异步执行命令。