Search code examples
c#wpfxamlwindows-8.1win32exception

change MessageDialog content or show new one from MessageDialog handler Windows Store app


I have MessageDialog dialogue responsible for delete confirmation.

private async void ShowDialogClick(object sender, RoutedEventArgs e)
{
    MessageDialog md = new MessageDialog("Are your sure you want to delete this?");

    md.Commands.Add(new UICommand("Delete",
        new UICommandInvokedHandler(DeleteItemHandler)));
    md.Commands.Add(new UICommand("Cancel"));

    await md.ShowAsync();
}

When user clicks Delete, DeleteItemHandler invokes operation on database, but how can I inform user about unsuccessful operation?

I tried to create new MessageDialog, but I got win32 exception.

private async void DeleteItemHandler(IUICommand command)
{
    MessageDialog md = new MessageDialog("New content");

    String result = DbDeletation();

    if(result != "OK")
        await md.ShowAsync();
}

What is the best way to inform user about error?


Solution

  • According to Windows Store App guidelines MessagegDialog isn't good way to confirm delete.

    When the app needs to confirm the user's intention for an action that the user has taken, a flyout is the appropriate surface. See Guidelines for flyouts.

    Now I've cleaner code...

        private async void DeleteItem_Click(object sender, RoutedEventArgs e)
        {
            MessageDialog md = new MessageDialog("Error");
    
            String result = DbDeletation();
    
            if (result != "OK")
                await md.ShowAsync();
        }
    

    And more gently solution :)

        <Button HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Content="Show Dialog">
            <Button.Flyout>
                <Flyout>
                    <StackPanel>
                        <TextBlock>Are your sure you want to delte this?</TextBlock>
                        <Button Click="DeleteItem_Click"
                                Content="Delete"
                                HorizontalAlignment="Right"/>
                    </StackPanel>
                </Flyout>
            </Button.Flyout>
        </Button>