我正在使用Template10来创建我正在创建的UWP应用程序。我正在使用汉堡模板。我想在汉堡菜单中有一个辅助按钮来调用活动视图的刷新方法。
我的计划是在汉堡菜单的辅助命令中放置一个普通按钮,在onclick事件中调用refresh方法。我将使用refresh方法在我的所有视图上都有一个接口,因此每个视图都有方法。
获取对活动视图的引用的最佳方法是什么,以便我可以从shell中的onclick事件调用该方法?
答案 0 :(得分:1)
为实现这一目标,我们可以在HamburgerButtonInfo
中添加HamburgerMenu.SecondaryButtons
,例如:
<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>
然后在代码隐藏中,我们可以在Event
类中添加Shell
,例如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
仅引用活动视图。