2010-02-18 3 views
2

В старые времена для WinForms, если ваш пользователь создавал/редактировал некоторую информацию в DialogBox, было легко обнаружить закрытие окна, и если данные были грязными, спросите, хотят ли они спасти.Закрытие страницы остановки Silverlight перед сохранением

Вопрос: как вы подходите к этому сценарию в Silverlight, где все, кажется, выполняется в UserControls, которые не имеют очевидного способа узнать, когда страница закрывается, т.е. переход на другую страницу в приложении Silverlight просто откроется другой UserControl, не проверяя предыдущее сохранение UserControl.

Должен быть какой-то стандартный способ достижения этого?

+0

Что вы хотите сделать на странице закрыть? –

+0

Привет, Майкл, мне нужно проверить, есть ли на закрывающей странице грязные данные и дать пользователю возможность его сохранить. На самом деле просто нужно прекратить пользователям заполнять данные и переключиться на другую страницу и забыть сохранить. – Mitch

ответ

2

Если вам нужно задать пользователю вопрос о том, сохранять или нет, вам необходимо будет обработать это в браузере onbeforeunload (хотя это не стандартное событие, оно поддерживается теми браузерами, на которых официально поддерживается Silverlight) , Возможно, вы сможете настроить небольшой javascript для возврата в ваше приложение, когда стреляет onbeforeunload.

Это говорит о том, что я не являюсь поклонником вопроса «Вы уверены, что хотите потерять всю эту работу, которую вы только что сделали». «Конечно, я не хочу потерять его, сохранить его уже, пока я могу его отменить позже, если это необходимо, я счастлив».

+0

Привет, Энтони, спасибо за ответ. Конечно, если у вас есть способ «сохранить его уже», у вас также будет вопрос: «Хотите ли вы« сохранить его уже »? Меня не волнует, если пользователь нажимает кнопку закрытия приложения, если пользователь просто выбирает другую страницу из меню приложения без сохранения. – Mitch

+1

Моя точка зрения была не в вопросе о том, есть ли у вас вопрос __way__, я бы предпочел, чтобы программы __not__ вообще не спрашивали. – AnthonyWJones

+0

Я согласен, но последнее приложение, которое я написал так, первые комментарии, которые я получил от пользователей, это то, почему он позволяет мне выйти без сохранения! Я думаю, что пользователи должны быть спасены от самих себя! – Mitch

2

Вы можете обработать событие Application.Exit для выполнения кода при закрытии приложения. Будьте предупреждены, что в это время сетевой стек уже отключен, поэтому вы не можете отправлять какие-либо сообщения из приложения. Exit. Вы не можете отменить событие.

1

+1 Майкл. Это текущее ограничение SL. Тем не менее, вы можете сохранить изолированное хранилище от события выхода приложения, было бы возможно в вашем приложении проверить, загрязнен ли он, и если это так сохранить в хранилище iso. Затем в следующий раз, когда ваше приложение загрузится, вы можете загрузить грязные данные из хранилища iso, готовые продолжить редактирование.?

+0

Привет, Джейсон, вы знаете, исправлено ли это в Silverlight 4? Конечно, это шаг назад, если мы не можем остановить наших пользователей, глупо нажимая на неправильную кнопку и отбрасывая их изменения, не запрашивая их. – Mitch

+0

Привет Митч, извините, не знаю - не было шанса взглянуть на все бета-версии 4 - мы могли потратить целую жизнь в бета-версии! Другой вариант, который я видел в письменном виде, - иметь таймер в фоновом режиме, который автосохраняет (к веб-службе) каждые несколько минут - снова не идеально ... –

+0

Спасибо за ваши отзывы Джейсон, надеюсь, MS сделает Silverlight 4 более подходит для приложений LOB. Наверняка, это не так сложно обнаружить, когда Usercontrol закрывается !? – Mitch

Смежные вопросы