Мое первое сообщение здесь, так что надеюсь кто-то может помочь. Я довольно новичок в C# и Silverlight, поэтому, пожалуйста, будьте осторожны.Как перейти на другую страницу без вызова конструктора страницы
Вот моя текущая проблема/проблема.
У меня есть MainPage.xaml, который имеет элемент управления сеткой для отображения страниц. Когда мой сайт загружается, я хотел бы показать страницу UserControl для входа в систему или регистрации.
Я создал страницу UserControl, позвонил на ctrlLogon.xaml. ctrlLogon размещает фрейм, который будет содержать страницу входа или регистрации. Я использую фрейм, потому что я использую настраиваемый переход между страницей входа и регистрации.
Вход в систему происходит на LoginPage.xaml, который использует службы wcf для связи с базой данных. Это нормально, но мне нужен обработчик событий для уведомления ctrlLogon, если пользователь входит в систему успешно или не может войти в систему.
В ctrlLogon.xaml.cs:
public partial class ctrlLogon : UserControl
{
pgLogonPage newLogonPage;
public ctrlLogon()
{
InitializeComponent();
newLogonPage = new pgLogonPage();
newLogonPage.LoggedInOK += new EventHandler(newLogonPage_LoggedInOK);
newLogonPage.LoginFailed += new EventHandler(newLogonPage_LoginFailed);
}
void newLogonPage_LoggedInOK(object sender, EventArgs e)
{
//throw new NotImplementedException();
}
void newLogonPage_LoginFailed(object sender, EventArgs e)
{
//throw new NotImplementedException();
}
Затем либо через нажатие кнопки или в зависимости от того средства я использую:
ContentFrame.Navigate (новый Uri ("/ Views/pgLogonPage.xaml") , UriKind.Relative);
Это нормально работает, перейдя на страницу pgLogonPage.
Моя проблема возникает в том, что я создаю и экземпляр pgLogonPage для того, чтобы установить обработчик событий, но Navigate также создает экземпляр pgLogonPage, так что следующий не работает:
public partial class pgLogonPage : Page
{
ServiceClient smsClient;
public pgLogonPage()
{
InitializeComponent();
Client = new ServiceClient();
Client.LoginCompleted += new EventHandler<LoginCompletedEventArgs (Client_LoginCompleted);
}
public event EventHandler LoggedInOK;
public void OnLoggedInOK()
{
if (LoggedInOK != null)
LoggedInOK(this, new EventArgs());
}
public event EventHandler LoginFailed;
public void OnLoginFailed()
{
if (LoginFailed != null)
LoginFailed(this, new EventArgs());
}
void Client_LoginCompleted(object sender, LoginCompletedEventArgs e)
{
if (e.Result.Contains("Success"))
{
OnLoggedInOK();
}
else
{
OnLoginFailed();
}
}
}
Обработчики событий LoggedInOK и LoginFailed всегда равны нулю. Я думаю, это потому, что создаются два экземпляра pgLogonPage. Я мог ошибаться, поэтому, пожалуйста, любая помощь, чтобы получить эту работу, ценится. Если есть что-то непонятное, пожалуйста, дайте мне знать.
Сердечные приветы
Neill
Thanks Maciek, Посмотрите, что вы упомянули. –
P.S. Можете ли вы подумать, что, возможно, еще один способ вызвать newLogonPage.LoggedInOK + = новый EventHandler (newLogonPage_LoggedInOK); newLogonPage.LoginFailed + = новый EventHandler (newLogonPage_LoginFailed); tx –
Ну ... Я бы пошел на проверку подлинности на основе WCF Ria ... проверьте шаблон бизнес-приложения Silverlight. Кроме того, просмотрите галерею кода WCF Ria и образцы для образцов авторизации. – Maciek