我想知道如何从C#Windows应用商店应用中的不同类访问主页的当前实例。
具体来说,在用于Surface RT平板电脑的Windows应用商店应用中(因此,仅限于RT API),我想访问其他类中的主页方法和UI元素。
创建新实例的工作原理如下:
MainPage mp = new MainPage();
mp.PublicMainPageMethod();
mp.mainpageTextBlock.Text = "Setting text at runtime";
因为它暴露了方法/ UI元素,但这不是正确的过程。
在运行时从其他类访问主页上的方法和修改UI元素的最佳实践是什么?有几篇关于Windows Phone的文章,但我似乎找不到任何适用于Windows RT的文章。
答案 0 :(得分:37)
我同意使用MVVM模式更好,但是如果你需要获取当前页面,你可以按如下方式进行:
var frame = (Frame)Window.Current.Content;
var page = (MainPage)frame.Content;
答案 1 :(得分:2)
如果您正在使用MVVM,则可以使用Messenger类:
MainWindow.xaml:
using GalaSoft.MvvmLight.Messaging;
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
Messenger.Default.Register<NotificationMessage>(this, (nm) =>
{
//Check which message you've sent
if (nm.Notification == "CloseWindowsBoundToMe")
{
//If the DataContext is the same ViewModel where you've called the Messenger
if (nm.Sender == this.DataContext)
//Do something here, for example call a function. I'm closing the view:
this.Close();
}
});
}
在您的ViewModel中,您可以随时调用Messenger或通知您的视图:
Messenger.Default.Send<NotificationMessage>(new NotificationMessage(this, "CloseWindowsBoundToMe"));
非常简单......:)
答案 2 :(得分:-1)
我更喜欢代表/事件,这样你就没有直接访问类。
public MainWindow()
{
StartWindowUserControl.newBla += StartWindowUserControl_newBla;
private void StartWindowUserControl_newBla()
{
和
public partial class StartWindowUserControl : UserControl
{
public delegate void newBlaDelegate();
public static event newBlaDelegate newBla;
MethodA()
{
new();