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

C# 如何在不按下按钮的情况下通过c代码在内容控件之间切换?,c#,wpf,mvvm,contentcontrol,C#,Wpf,Mvvm,Contentcontrol,我有一个c#应用程序(wpf、mvvm)。我有3个单选按钮,描述了3个垂直选项卡,每个选项卡都有一个命令(ICommand)来显示一个内容控件(视图),它也是用XAML表示的。c代码中的控件之间的切换是通过一个视图来完成的。可见性=可见,其他视图-隐藏。单击选项卡时,所有操作都很好。 但是,我现在想在一个特定的不活动超时后——切换到“主”内容控件,但运气不好。计时器正确超时,并且在TimeRecursed时,我使用使此Home内容控件可见和隐藏其他内容控件的函数(就像我选择此选项卡时所做的那样)

我有一个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方式。有一个更好的方法:

  • 在父视图中定义CurrentPage属性
    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>
    
    
    
  • 在命令实现中将required
    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>