【发布时间】:2011-07-13 09:25:19
【问题描述】:
我在这里的第一篇文章希望有人能提供帮助。我对 C# 和 Silverlight 还很陌生,所以请保持温和。
这是我当前的问题/问题。
我有 MainPage.xaml,它有一个 Grid 控件来显示页面。当我的网站加载时,我想显示一个用于登录或注册的 UserControl 页面。
我创建了一个 UserControl 页面,我们称之为 ctrlLogon.xaml。 ctrlLogon 承载一个框架,该框架将保存登录或注册页面。我使用框架是因为我在登录和注册页面之间使用了自定义转换。
登录发生在使用 wcf 服务与数据库通信的 LoginPage.xaml 上。这很好,但是如果用户登录成功或登录失败,我需要一个事件处理程序来通知 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(new 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 的两个实例。我可能是错的,所以请任何帮助来完成这项工作。如果有不清楚的地方请告诉我。
亲切的问候
尼尔
【问题讨论】:
标签: silverlight