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