【问题标题】:Call View Method from Button in Menu in Shell从 Shell 菜单中的按钮调用 View 方法
【发布时间】:2016-08-18 20:14:17
【问题描述】:

我正在为我正在创建的 UWP 应用程序使用 Template10。我正在使用汉堡包模板。我想在汉堡菜单中有一个辅助按钮,它调用活动视图的刷新方法。

我的计划是在汉堡菜单的辅助命令中放置一个普通按钮,并在 onclick 事件中调用刷新方法。我将使用 refresh 方法在我的所有视图上都有一个界面,因此每个视图都有该方法。

获取对活动视图的引用以便我可以从 shell 中的 onclick 事件调用方法的最佳方法是什么?

【问题讨论】:

    标签: c# xaml uwp template10


    【解决方案1】:

    为此,我们可以在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 仅引用活动视图。

    【讨论】:

    • 谢谢杰!正是我想要的。
    • 完美推荐,杰伊。教科书完美。
    • @JohnSullivan 很高兴知道它有帮助。那么您的问题是acceptable answer 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2015-02-28
    • 1970-01-01
    • 2015-10-31
    • 2012-05-15
    • 2014-10-29
    相关资源
    最近更新 更多