c# - 如何在 WPF C# 中在一帧中的多个页面之间导航
问题描述
我有 :
- MainWindow.xaml(我有框架)
- 登录页面.xaml
- 注册页面.xaml
这是 MainWindow.xaml 中的框架:
<Frame x:Name="MainPage"
Content="{Binding ApplicationViewModel.CurentPage,
Source={x:Static viewMod:ViewModelLocator.Instanze},
Converter={local:ApplicationPageValueConverter}}"/>
ApplicationViewModel
是作为视图模型的应用程序状态:
public class ApplicationViewModel
{
/// <summary>
/// The current page of the application
/// </summary>
public ApplicationPage CurentPage { get; set; } = ApplicationPage.Login;
}
ViewModelLocator
IoC
从用于绑定 Xaml 文件中的视图模型中定位
public class ViewModelLocator
{
/// <summary>
/// Singleton instance of the locator
/// </summary>
public static ViewModelLocator Instance { get; private set; } = new ViewModelLocator();
/// <summary>
/// The application view model
/// </summary>
public static ApplicationViewModel ApplicationViewModel => IoC.Get<ApplicationViewModel>();
}
在ApplicationPageValueConverter
我有这个,转换页面:
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
switch ((ApplicationPage)value)
{
case ApplicationPage.Login:
return new LoginPage();
case ApplicationPage.SignUp:
return new SignUpPage();
default:
Debugger.Break();
return null;
}
}
在MainWindow.xaml.csMainViewModel
中ViewModel
,我有一个“SignUp”按钮,当我单击该按钮时,将执行ICommand
谁在执行此操作:
public ICommand LoginCommand { get; set; }
LoginCommand = new RelayCommand(() => Login());
private void Login()
{
IoC.Get<ApplicationViewModel>().CurentPage = ApplicationPage.SignUp;
}
的值ApplicationViewModel.CurentPage
已更改为,ApplicationPage.SignUp
但不会ApplicationPageValueConverter
转换/显示页面。
这是我正在执行此操作的IoC
代码:OnStartup
base.OnStartup(e);
IoC.SetUp();
....
我不明白为什么它不显示页面,我做错了什么?
解决方案
ApplicationViewModel
只要设置了属性,就应该实现INotifyPropertyChanged
并引发事件:PropertyChanged
CurrentPage
public class ApplicationViewModel : INotifyPropertyChanged
{
private ApplicationPage _currentPage = ApplicationPage.Login;
/// <summary>
/// The current page of the application
/// </summary>
public ApplicationPage CurentPage
{
get { return _currentPage; }
set { _currentPage = value; NotifyPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
这是通知视图更改和再次调用转换器所必需的。
推荐阅读
- image - ImageMagick 或其他方法:如何在图像中找到对象中心的坐标?
- javascript - 为什么我的基本情况没有返回适当的数组?
- python - 在重复行中对 DataFrame 中特定列的值求和
- python - 将 GeoDataFrame 几何图形分解为单部分多边形
- python - 如何为 Plotly 条形图设置一组静态 x 轴值和图例?
- javascript - 如何在 Wordpress 帖子循环中使用自定义图像创建自定义 Facebook 共享链接
- python - Tkinter 网格创建重叠的小部件
- drupal - Drupal 更新 8.9.11 到 8.9.15 生成未知列错误
- jasper-reports - .jrxml 文件中的字段不会因负值的动态值溢出而拉伸
- c - 将 char 数组传递给方法时,该数组会丢失其值