如何在没有按下按钮的情况下通过c#代码在内容控件之间切换?

时间:2017-03-19 13:21:27

标签: c# wpf mvvm contentcontrol

我有一个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>

1 个答案:

答案 0 :(得分:0)

绑定到View意味着您的ViewModel包含属性,并且它不是MVVM方式。有一种更好的方法:

  1. 在您的父ViewModel中定义CurrentPage属性。

    private object _currentPage;
    
    public object CurrentPage
    {
        get { return _currentPage; }
        set
        {
            _currentPage = value;
            OnPropertyChanged(nameof(CurrentPage));
        }
    }
    
  2. 仅绑定一个内容控件

    <ContentControl Content="{Binding CurrentPage}"/>
    
  3. 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>
    
  4. 在您的应用程序词典或任何需要的地方注册ResourceDictionary

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Views.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    
  5. 在命令实现中将必需的ViewModel设置为CurrentPage属性。您可以在此处添加超时或任何其他逻辑。首选异步执行命令。