如何在活动结束后收到通知

时间:2018-04-04 21:33:51

标签: c# xaml events uwp delegates

在我的UWP应用中,我正在使用 CommandBar DynamicOverflowItemsChanging 事件我的用例并不复杂,我试图通过使用此事件来解决另一个问题,请参阅this post回答

因此,如上面提供的链接中的答案所示,我正在尝试调用此事件并同步MoreButton的可见性现在问题是当命令栏的辅助溢出菜单没有&删除或添加了该项目,因此它们仍会显示事件被触发前的项目,但是当此事件完成后,项目的转移也会完成。

  

所以简而言之,我想以某种方式提出另一个事件,或者在 DynamicOverflowItemsChanging 完成执行时得到通知,这样我就可以拥有正确的数据并正确设置更多按钮的可见性。或者换句话说,我想实现 DynamicOverflowItemsChanged 事件的行为,遗憾的是,该事件并不存在于api中,所以我正在寻找另一种方法。

我知道我可以在最后(在DynamicOverflowItemsChanging事件结束之前)调用另一个事件,但是这样我仍然没有获得正确的值,正确的值只有在此事件时才可用完成它的执行。就像我们可以使用Task.Then()一样,所以当一个任务完成时,另一个任务可以自动启动,所以我想要这样的东西。任何建议将不胜感激。

protected override void OnApplyTemplate()
{

    var barr = (CommandBar)GetTemplateChild("MediaControlsCommandBar");

    //the event to control the dynamicoverflow automatically.
    barr.DynamicOverflowItemsChanging += (s, e) =>
    {
        if (_secondarycontrols.Items.Count == 0 && e.Action == CommandBarDynamicOverflowAction.AddingToOverflow)
            _moreButton.Visibility = Visibility.Visible;
        else if (_secondarycontrols.Items.Count == 1 && e.Action == CommandBarDynamicOverflowAction.RemovingFromOverflow)
            _moreButton.Visibility = Visibility.Collapsed;
    };//when this event finishes here I want to get notified.

    //base implementation
    base.OnApplyTemplate();
}

1 个答案:

答案 0 :(得分:1)

温暖的问候,微软学生合作伙伴:-)。

快速而肮脏的黑客攻击是在处理程序的末尾添加Task.Delay并希望项目在延迟结束之前已经改变。这当然非常丑陋且容易出错。我建议采用不同的解决方案。

您已经可以访问_secondarycontrols CommandBarOverflowPresenter。这非常有用,因为Items属性具有VectorChanged事件,只要添加,删除或更改项目,就会触发该事件。这意味着,您实际上可以使用此事件并在其中移动逻辑,而不是使用DynamicOverflowItemsChanging事件。然后,您可以直接检查准确的项目数。