我创建了一个UWP XAML页面,我以编程方式添加UserControl,然后显示在ContentControl中。
UserControl control = new Views.PlayingGameScreen();
this.ContentControl.Content = control;
我想知道如何从UserControl访问父页面中的方法。
答案 0 :(得分:1)
我认为最干净的方法是在UserControl上公开父设置的属性。
public partial class PlayingGameScreen : UserControl
{
public ICommand Command { get; set; }
public void SomeMethod()
{
this.Command?.Execute(null);
}
}
//parent code, define the command with the logic to run
var command = new DelegateCommand(...);
var control = new Views.PlayingGameScreen
{
Command = command
};
this.ContentControl.Content = control;
通过这种方式,父级设置Command,而UserControl不需要知道托管父级是什么,并且UserContol没有使用全局类。这是一个完全解耦的解决方案。
Bonus,将Command设置为DependencyProperty,然后它也可以在xaml中分配。您可以将Command绑定到ViewModel,ViewModel将是Page的ViewModel。
<uc:PlayingGameScreen Command="{x:Bind SomeCommand}"/>
我尝试了很多不同的方式,这是我的最爱。
答案 1 :(得分:0)
从我对UWP的小经验(1个应用程序和计数:D):
您可以将ParentPage的引用保留在类的静态属性中,我们将其命名为PagesGateway.cs
静态类代码:
public static class PagesGateway
{
public static ParentPage ParentPage {get; set;}
}
然后在您的ParentPage后面的代码中,您需要设置引用:
public partial ParentPage:Page
{
public ParentPage{
PagesGateway.ParentPage = this;
}
}
这样您就可以在任何地方访问ParentPage
个实例方法。
但我觉得那不是最好的做法。但是我使用它来从任何地方访问我的ViewModels
,并且它完美地工作,但你必须考虑到它使ViewModel的可重用性无效