c# - 从框架调用父函数
问题描述
我有一个与设计师一起构建的 WPF 应用程序。在其中我有一个框架,我正在加载一个页面。
老实说,我迷路了。由于缺乏关于 MVVM 的指导和能力,我希望有人能够帮助我了解如何做我想做的事情。
在页面中,我需要调用公共方法“public void UpdateTxt()”。我知道这已经做了一百万次,但我就是不明白。我的大部分搜索也会拉取 web/javascript 结果。
我以前在 winform 环境中使用两个窗口做过类似的事情。
public partial class setupApp : Form
{
private Form1 m_parent;
public setupApp(Form1 frml)
{
InitializeComponent();
m_parent = frml;
}
虽然上面的代码在 winform 中工作,使我能够从父窗口中找到所有公共函数,但我似乎无法将其转换为 WPF。
我努力了
public partial class Childpage: Page
{
private MainWindow m_parent;
public Childpage(MainWindow mw1)
{
InitializeComponent();
m_parent = mw1;
}
这不会在构建时引发错误,但一旦调试器启动就无法中断模式。我也不知道这个错误是什么意思。
在类型上找不到匹配的构造函数
为什么不翻译 C# 后端代码?有没有更好的办法?
解决方案
我认为您Source
在 xaml 代码中设置了 Frame 的属性,如下所示:
<Frame Source="SamplePage.xaml"/>
在这种情况下,您需要在页面中添加一个无参数构造函数。
public partial class SamplePage
{
private MainWindow _parentWindow;
public SamplePage()
{
InitializeComponent();
}
public SamplePage(MainWindow parentWindow) : this()
{
_parentWindow = parentWindow;
}
}
但是,如果您想将父窗口传递给子页面,您可以在代码隐藏中设置框架内容。像这样:
SampleFrame.NavigationService.Navigate(new SamplePage(this));
在这种情况下,您不需要无参数构造函数。
推荐阅读
- python - 在python中生成列表的随机颜色
- typescript - vue类组件继承,来自基类的方法“不是函数”
- c# - 带有 WPF/C# 问题的 System.Threading.Timer
- linux - ffmpeg 硬件解码/编码转码
- java - 使用 JPA 的 Helidon 无法使用外部配置 (application.yaml)
- reactjs - 安装路由器后,Chrome 显示我的 React 应用程序出现奇怪的错误
- sql - Bigquery 更新/插入嵌套数组和结构数组
- python - mininet_wifi iperf 无法设置
- c# - 是否可以在单个测试用例中结合桌面测试和 Web 测试
- asp.net-mvc - 如何将 Azure Active Directory 身份验证添加到 Razor Pages 应用程序?