【发布时间】:2021-12-08 20:25:25
【问题描述】:
我的左侧菜单导航外壳中有选择器,可以更改主页语言,
例如实际上是英文的应用程序。当我更改为法语时,它会更改并重定向到带有法语文本的主页。
问题是当我在导航页面按返回箭头时,它会返回旧语言(英语)。
这里是shell导航
<Shell ..>
<Shell.FlyoutHeader>
<Picker ItemsSource="{Binding MultiLang, Mode=TwoWay}" SelectedItem="{Binding SelectedLang}">
</Picker>
</Shell.FlyoutHeader>
<ShellContent x:Name="home"
Route="main"
ContentTemplate="{DataTemplate home:Dashboard}" />
</Shell>
这是重定向到主页的方法:
private async void ChangeLange(string lang)
{
...
Routing.RegisterRoute(nameof(Dashboard), typeof(Dashboard));
await Shell.Current.GoToAsync($"{nameof(Dashboard)}");// it redirect but with button back
RemoveStackNavigation ()
// await Shell.Current.GoToAsync("//main"); like this , it dosent refresh the page with
Shell.Current.FlyoutIsPresented = false;
}
这里是 MVMM
public string _selectedLang;
public string SelectedLang
{
get
{
return _selectedLang;
}
set
{
if (_selectedLang != value)
{
_selectedLang = value;
OnPropertyChanged("SelectedLang");
ChangeBuilding(value);
}
}
}
在像这样重定向到仪表板之前,我尝试了 RemoveStackNavigation:
public static void RemoveStackNavigation()
{
var existingPages = Shell.Current.Navigation.NavigationStack.ToList();
foreach (var page in existingPages)
{
if (page != null)
Shell.Current.Navigation.RemovePage(page);
}
}
【问题讨论】:
-
您必须在主页的
OnAppearing中做一些事情,以确保它以当前语言重新呈现。我不知道该怎么做-希望其他人有建议。另一种方法是覆盖后退按钮方法 - 但由于页面已经在堆栈上,我认为这种方法更复杂 - 你必须在导航堆栈上找到页面,将其删除并替换用一个新的。
标签: c# shell xamarin.forms navigation