C# 从Shell中菜单中的按钮调用View方法
我正在为我正在创建的UWP应用程序使用Template10。我正在使用汉堡包模板。我想在hamburger菜单中有一个辅助按钮,用于调用活动视图的刷新方法 我的计划是在hamburger菜单的辅助命令中放置一个普通按钮,并在onclick事件中调用refresh方法。我在所有视图上都有一个使用refresh方法的界面,因此每个视图都有该方法C# 从Shell中菜单中的按钮调用View方法,c#,xaml,uwp,template10,C#,Xaml,Uwp,Template10,我正在为我正在创建的UWP应用程序使用Template10。我正在使用汉堡包模板。我想在hamburger菜单中有一个辅助按钮,用于调用活动视图的刷新方法 我的计划是在hamburger菜单的辅助命令中放置一个普通按钮,并在onclick事件中调用refresh方法。我在所有视图上都有一个使用refresh方法的界面,因此每个视图都有该方法 获取对活动视图的引用的最佳方法是什么,以便我可以从shell中的onclick事件调用该方法?为了实现这一点,我们可以在汉堡菜单中添加汉堡按钮信息 <
获取对活动视图的引用的最佳方法是什么,以便我可以从shell中的onclick事件调用该方法?为了实现这一点,我们可以在
汉堡菜单中添加汉堡按钮信息
<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>
在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
}
NavigatedToAsync上的公共重写异步任务(对象参数、NavigationMode模式、IDictionary SuspendionState)
{
if(suspensionState.Any())
{
Value=suspensionState[nameof(Value)]?.ToString();
}
Views.Shell.Instance.RefreshEvent+=刷新;
等待任务。完成任务;
}
NavigatingFromAsync上的公共重写异步任务(NavigatingEventArgs args args)
{
args.Cancel=false;
Views.Shell.Instance.RefreshEvent-=刷新;
等待任务。完成任务;
}
私有无效刷新()
{
//待办事项
}
这里我使用了ViewModel,例如,您也可以在视图的代码隐藏中实现它。但是请注意,当我们导航到某个视图时,我们需要订阅RefreshEvent
,当我们离开该视图时,我们需要取消订阅,以便RefreshEvent
仅引用活动视图。谢谢!正是我想要的。一个完美的推荐,杰。教科书太完美了。@JohnSullivan很高兴知道它有帮助。那么,这是对你的问题的回答吗?
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
}