1

我想执行以下操作。我有一个 ToggleSwitch,它的 Toggled 事件处理程序执行一些操作。如果此操作失败,我想将 ToggleSwitch 的状态重置为原来的状态。

我通过这样做来实现这一点:toggleSwitch.IsOn = !toggleSwitch.IsOn;

我的问题是,如果操作总是失败,这会再次引发 Toggled 事件,从而导致无限循环。

这是我的完整代码示例

    private async void ToggleSwitch_Toggled(object sender, Windows.UI.Xaml.RoutedEventArgs e)
    {
        ToggleSwitch toggleSwitch = sender as ToggleSwitch;
        success = dummyService.performAction(toggleSwitch.IsOn); 
        if (!success )
        {
            //raise dialog to inform user here
            toggleSwitch.IsOn = !toggleSwitch.IsOn;
        }
    }

我知道这种行为已经在不同的应用程序中实现,所以实现这一点并不难。

4

2 回答 2

2

您可以执行以下操作来分离和重新附加您的事件:

if (!success )
{
    toggleSwitch.Toggled -= ToggleSwitch_Toggled;
    try
    {
      toggleSwitch.IsOn = !toggleSwitch.IsOn;
    }
    finally
    {
      toggleSwitch.Toggled += ToggleSwitch_Toggled;
    }
}
于 2015-11-28T16:45:04.217 回答
0

我假设您只想在打开时执行操作toggleswitch。如果是这种情况,那么你可以试试这个:

private async void ToggleSwitch_Toggled(object sender, Windows.UI.Xaml.RoutedEventArgs e)
    {
        ToggleSwitch toggleSwitch = sender as ToggleSwitch;

        if(toggleSwitch == null || !toggleSwitch.IsOn)
          return;
        // You are missing your await statement....
        success = await dummyService.performAction(toggleSwitch.IsOn); 
        if (!success )
        {
            //raise dialog to inform user here
            toggleSwitch.IsOn = !toggleSwitch;
        }
    }
于 2015-11-28T16:56:48.957 回答