/// <summary>
        ///
        /// </summary>
        private void PermissionTarget_dialog_Closing(object sender, CancelRoutedEventArgs e)
        {
            // Retrieve relevant parameters
            object[] parameters = PermissionTarget_dialog.Content as object[];
            Oltp.AccountPermissionDataTable permissionsTable = parameters[1] as Oltp.AccountPermissionDataTable;

            if (permissionsTable.GetChanges() == null)
            {
                return;
            }

            MessageBoxResult result = MessageBox.Show(
                "Discard changes?",
                "Confirm",
                MessageBoxButton.OKCancel,
                MessageBoxImage.Warning,
                MessageBoxResult.Cancel);

            e.Cancel = result == MessageBoxResult.Cancel;
        }
        /// <summary>
        ///
        /// </summary>
        private void PermissionTarget_dialog_ApplyingChanges(object sender, CancelRoutedEventArgs e)
        {
            // Retrieve relevant parameters
            object[] parameters = PermissionTarget_dialog.Content as object[];
            Oltp.AccountPermissionDataTable permissionsTable = parameters[1] as Oltp.AccountPermissionDataTable;

            DataTable changes = permissionsTable.GetChanges();

            // No changes were made, skip the apply (but don't cancel)
            if (changes == null)
            {
                e.Skip = true;
                PermissionTarget_dialog.EndApplyChanges(e);
                return;
            }

            // Save the changes to the DB
            Window.AsyncOperation(delegate()
            {
                using (OltpProxy proxy = new OltpProxy())
                {
                    proxy.Service.AccountPermission_Save(changes as Oltp.AccountPermissionDataTable);
                }
            },
                                  delegate(Exception ex)
            {
                // Failed, so cancel and display a message
                MainWindow.MessageBoxError("Error while saving permissions.", ex);
                e.Cancel = true;
                return(false);
            },
                                  delegate()
            {
                permissionsTable.AcceptChanges();
                PermissionTarget_dialog.EndApplyChanges(e);
            });
        }