XAML:拨动开关复位状态
XAML: Toggleswitch reset state
我想执行以下操作。我有一个 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;
}
}
我知道这个行为已经在不同的应用程序中实现,所以实现这个不会太难。
您可以像这样分离和重新附加您的活动:
if (!success )
{
toggleSwitch.Toggled -= ToggleSwitch_Toggled;
try
{
toggleSwitch.IsOn = !toggleSwitch.IsOn;
}
finally
{
toggleSwitch.Toggled += ToggleSwitch_Toggled;
}
}
我假设您只想在 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;
}
}
我想执行以下操作。我有一个 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;
}
}
我知道这个行为已经在不同的应用程序中实现,所以实现这个不会太难。
您可以像这样分离和重新附加您的活动:
if (!success )
{
toggleSwitch.Toggled -= ToggleSwitch_Toggled;
try
{
toggleSwitch.IsOn = !toggleSwitch.IsOn;
}
finally
{
toggleSwitch.Toggled += ToggleSwitch_Toggled;
}
}
我假设您只想在 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;
}
}