我正在研究使用Silverlight 5编写的遗留应用程序,该应用程序包含许多反模式和不良做法。我负责使用SingalR添加实时交互(例如通知) 顺便说一句,他们正在使用these WCF RIA服务与身份验证进行交互。
他们有一个主页面,这个页面是我收到用户通知并向登录用户显示的地方:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
//...
}
}
因为你可以看到我没有设置DataContext属性,只要用户登录,我需要在用户登录到应用程序后设置MainPage的DataContext,所以我必须在LoginOperation_Completed里面这样做LoginForm
页面:
public partial class LoginForm : StackPanel
{
private LoginRegistrationWindow parentWindow;
private LoginInfo loginInfo = new LoginInfo();
public LoginForm()
{
InitializeComponent();
//...
}
private void LoginOperation_Completed(LoginOperation loginOperation)
{
if (loginOperation.LoginSuccess)
{
// Here I need to access MainPages's DataContext property and set it with my ViewModel
}
}
}
现在我的问题是,如何在另一个类(在本例中为LoginFrom
)中设置MainPage的DataContext属性?
我还试图为我的MainPage用户控件提供一个ID,并按如下方式访问它:
mainPage.DataContext = new NotificationItemViewModel();
但是编译器给了我这个错误:
当前上下文中不存在名称“mainPage”
答案 0 :(得分:2)
我终于弄清楚如何解决我的问题,有一种简单的方法可以实现这一点,我应该在类本身中创建MainPage
类的静态实例:
public partial class MainPage : UserControl
{
public static MainPage Instance { get; private set; }
public MainPage()
{
InitializeComponent();
Instance = this;
}
}
现在我可以通过这种方式访问MainPage的DataContext:
MainPage.Instance.DataContext = new NotificationItemViewModel();
答案 1 :(得分:0)
您需要将MainPage
用户控件命名为LoginForm
XAML中粘贴的位置。不在MainPage
的定义中。