我有一个Silverlight 4业务项目,我在其中启用了ASP.NET身份验证/授权角色信息。我想将当前经过身份验证的用户的帐户信息从app.xaml.cs codebehind传递到另一个XAML页面,但我不知道如何完成,或者甚至可能。
我的目标是根据当前用户是否处于特定管理员相关角色,对目标XAML页面的各个按钮的IsEnabled属性进行数据绑定。 app.xaml.cs的Application_UserLoaded事件处理程序似乎是启动此任务的最安全的事件处理程序,因为它仅在从服务器加载用户的帐户信息后才会触发。
我之前曾尝试直接从目标XAML页面检索当前用户信息,但我从未获取当前用户信息,因为Application_UserLoaded尚未完成加载当前用户信息。
public partial class App : Application { private void Application_UserLoaded(LoadUserOperation operation) { // How do you create an object reference to a XAML page from your project solution // from this event handler? } }
预先感谢您的任何帮助, 约翰
答案 0 :(得分:1)
您无需引用视图即可完成此任务。有一个更好的解决方案。首先,使用IsAdmin属性为应用程序范围的上下文创建一个类,并将其添加到App的资源字典中
private void Application_Startup(object sender, StartupEventArgs e)
{
this.Resources.Add("GlobalContext", new GlobalContext());
}
在Application_UserLoaded处理程序中设置IsAdmin属性,并从任何视图绑定到该属性
<Button IsEnabled="{Binding IsAdmin, Source={StaticResource GlobalContext}}"
干杯。
答案 1 :(得分:0)
经过一些试验和错误后,我通过在app.xaml.cs的Application_UserLoaded()处理程序中引发自定义事件处理程序解决了我的原始问题。
然后,我从我的特定XAML视图页面的代码隐藏处订阅了这个自定义事件处理程序,我需要对我的各种Silverlight控件的IsEnabled属性进行数据绑定。
我必须创建自定义事件处理程序的原因是因为您不能假设安全角色信息始终可以在XAML视图页面的Loaded()事件处理程序中引用。
我在以下网址找到了有关此特定时间问题的更多信息: http://forums.silverlight.net/forums/p/146631/328217.aspx
欢呼声, 约翰