Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有MVVM表单的XAML从一个用户控件导航到另一个用户控件_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 带有MVVM表单的XAML从一个用户控件导航到另一个用户控件

C# 带有MVVM表单的XAML从一个用户控件导航到另一个用户控件,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我不熟悉具有MVVM结构的XAML表单。 我有一个像下面截图一样设计的表单。我有一个主窗体,它有3个按钮。单击屏幕截图左侧的每个按钮,它将打开相应的用户控件。 我想要的是在完成第一个操作(文件上载完成)时自动移动到下一个用户控件(导入文件/摘要) 我的代码如下所示: MainControl.XAML <Grid Grid.Row="1"> <Grid.ColumnDefinitions>

我不熟悉具有MVVM结构的XAML表单。 我有一个像下面截图一样设计的表单。我有一个主窗体,它有3个按钮。单击屏幕截图左侧的每个按钮,它将打开相应的用户控件。 我想要的是在完成第一个操作(文件上载完成)时自动移动到下一个用户控件(导入文件/摘要)

我的代码如下所示: MainControl.XAML

        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="auto"/>
                <ColumnDefinition Width="auto"/>
            </Grid.ColumnDefinitions>

            <Border CornerRadius="6" Background="SkyBlue" Margin="4">
                <WrapPanel Orientation="Vertical" HorizontalAlignment="Center" Margin="2">

                    <Button x:Name="btnUpload" Background="Transparent"  HorizontalAlignment="Left" Command="{Binding Path=UpdateViewCommand}" CommandParameter="FileUpload" KeyboardNavigation.IsTabStop="False" Margin="2">
                        <StackPanel Orientation="Horizontal">
                            <Image Source="pack://application:,,,/Resources/NCS.ico" Width="16" Height="16"/>
                            <Label Content="File Upload View" HorizontalContentAlignment="Center" />
                        </StackPanel>
                    </Button>

                    <Button x:Name="btnImport"  Background="Transparent" HorizontalAlignment="Left" Command="{Binding Path=UpdateViewCommand}" CommandParameter="ImportFile" KeyboardNavigation.IsTabStop="False" Margin="2">
                        <StackPanel Orientation="Horizontal">
                            <Image Source="pack://application:,,,/Resources/NCS.ico" Width="16" Height="16"/>
                            <Label Content="Import File" HorizontalContentAlignment="Center" />
                        </StackPanel>
                    </Button>
                    <Button x:Name="btnSummary" Background="Transparent" HorizontalAlignment="Left" Command="{Binding Path=UpdateViewCommand}" CommandParameter="Summary" KeyboardNavigation.IsTabStop="False" Margin="2">
                        <StackPanel Orientation="Horizontal">
                            <Image Source="pack://application:,,,/Resources/NCS.ico" Width="16" Height="16"/>
                            <Label Content="Summary Info" HorizontalContentAlignment="Center" />
                        </StackPanel>
                    </Button>

                </WrapPanel>
            </Border>

            <GridSplitter Grid.Column="1"/>

            <Local:FileUploadView Height="733" Margin="0.333,0,0,0.333" Grid.Column="2" Width="663"/>

            <!--<ContentPresenter Grid.Column="2" Content="{Binding Path=CurrentControl}"/>-->

            <ContentControl x:Name="placeHolder" HorizontalAlignment="Center" VerticalAlignment="Center" Height="733" Margin="0.333,0,0,0.333" Grid.Column="2" Width="663" Content="{Binding SelectedViewModel}"/>

        </Grid>
MainControlVM.cs

public partial class MainControl : UserControl
    {
        public MainControl()
        {
            InitializeComponent();
            DataContext = new MainControlVM();
        }
    }
 public sealed class MainControlVM : ViewModelBase
    {
        private BaseViewModel _selectedViewModel;
        public BaseViewModel SelectedViewModel
        {
            get { return _selectedViewModel; }
            set
            {
                _selectedViewModel = value;
                //OnPropertyChanged(nameof(SelectedViewModel));
                RaisePropertyChanged(() => SelectedViewModel);

            }
        }

        public ICommand UpdateViewCommand { get; set; }


        public override string DisplayName
        {
            get { return "Main Window"; }
        }



        public MainControlVM()
        {

            UpdateViewCommand = new UpdateViewCommand(this);
            RegisterOnChangeHandler(() => IsBusy, v => StatusText = v ? "Running..." : "Ready");
        }
}
UpdateViewCommand.cs基于Execute方法上的参数,它将调用相应的用户控件


只需将其放在上传方法
viewModel.SelectedViewModel=newtotalsummaryviewmodel()的末尾即可如何确定第一个操作何时完成?

 public class UpdateViewCommand : ICommand
    {
        private MainControlVM viewModel;

        public UpdateViewCommand(MainControlVM viewModel)
        {
            this.viewModel = viewModel;
        }
         public void Execute(object parameter)
        {

            if (parameter.ToString() == "FileUpload")
            {

                viewModel.SelectedViewModel = new FileUploadViewModel(this.viewModel);


            }
            else if (parameter.ToString() == "ImportFile")
            {

                viewModel.SelectedViewModel = new ImportFileViewModel();

            }
            else if (parameter.ToString() == "Summary")
            {
                viewModel.SelectedViewModel = new TotalSummaryViewModel();
            }
        }
}