为此,我们可以在HamburgerMenu.SecondaryButtons 中添加HamburgerButtonInfo,例如:
<Controls:HamburgerButtonInfo x:Name="RefreshButton" ButtonType="Command" Tapped="RefreshButton_Tapped">
<StackPanel Orientation="Horizontal">
<SymbolIcon Width="48" Height="48" Symbol="Refresh" />
<TextBlock Margin="12,0,0,0" VerticalAlignment="Center" Text="Refresh" />
</StackPanel>
</Controls:HamburgerButtonInfo>
然后在代码隐藏中,我们可以在Shell 类中添加一个Event,例如RefreshEvent。而在其他视图中,我们可以订阅这个事件。当我们单击/点击刷新按钮时,我们可以调用此事件来执行刷新。例如:
在 Shell.xaml.cs 中
public event Action RefreshEvent;
private void RefreshButton_Tapped(object sender, RoutedEventArgs e)
{
RefreshEvent?.Invoke();
}
在 MainPageViewModel.cs 中
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState)
{
if (suspensionState.Any())
{
Value = suspensionState[nameof(Value)]?.ToString();
}
Views.Shell.Instance.RefreshEvent += Refresh;
await Task.CompletedTask;
}
public override async Task OnNavigatingFromAsync(NavigatingEventArgs args)
{
args.Cancel = false;
Views.Shell.Instance.RefreshEvent -= Refresh;
await Task.CompletedTask;
}
private void Refresh()
{
//TODO
}
这里我以 ViewModel 为例,您也可以在视图的代码隐藏中实现它。但请注意,我们需要在导航到视图时订阅RefreshEvent,并在离开视图时取消订阅,以便RefreshEvent 仅引用活动视图。