我在这里阅读了许多类似的帖子,但我仍然有一些问题不仅关于如何实现这一点,而且还有一个更好或更合适的方法来实现这一目标。这就是我有一个WPF应用程序,其中我有一个主窗口,它实例化一个名为ScratchPad的页面对象,其中包含一个文本框和一个更新该文本框内容的方法。
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
ScratchPad scratchPad = new ScratchPad();
}
}
这是关联的XAML,它还在MainWindow中的框架中实例化(?)我的其他应用程序。
<DockPanel>
<TabControl TabStripPlacement="Left">
<TabItem Header="Main">
<Frame Source="Common/GUI/ScratchPad.xaml" ></Frame>
</TabItem>
<TabItem Header="Test Apps">
<Frame Source="Apps/TestApp/View/authPrompt_View.xaml" Margin="0,0,0,191.2" />
</TabItem>
<TabItem Header="Threads">
</TabItem>
</TabControl>
</DockPanel>
此对象旨在显示日志材料,以报告应用程序执行的操作的状态。 ScratchPad的代码如下所示。
public partial class ScratchPad : Page
{
public ScratchPad()
{
InitializeComponent();
}
public void updateStatus(string newText)
{
scratchPadTextBox.AppendText(newText);
}
}
我的目的是让我的许多其他类能够附加到该文本框,但是我相信为了做到这一点,我需要将对MainWindow对象的引用传递给想要写入的每个类。那个文本框。我的问题是其他类没有直接实例化(据我所知),因此我不太确定如何实现这一点,或者即使这是应该如何完成的。这是我希望能够附加到文本框的类的示例,当用户在通过MainWindow的XAML中的框架源实例化(?)的页面上进行提交时创建该文本框。
class ConnectionManager
{
public void authenticateSharePoint(string urlAddress)
{
DataContextRef.DataContextRefDataContext dc =
new DataContextRef.DataContextRefDataContext(new Uri("redacted.svc"));
dc.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; var source = dc.Test;
((System.Net.NetworkCredential)dc.Credentials).Domain = "blah";
((System.Net.NetworkCredential)dc.Credentials).UserName = "blah";
((System.Net.NetworkCredential)dc.Credentials).Password = "hardcodeisthebest123";
foreach (var item in source)
{
scratchPad.updateStatus("item.name: " + item.Name);
updateStatus("item.title: " + item.Title);
updateStatus("item.path: " + item.Path);
updateStatus("item.id: " + item.Id);
}
}
如上面再次复制的XAML中所示,当用户在MainWindow中的框架中托管的单独类中选择提交按钮时,将创建此类
<TabItem Header="Test App">
<Frame Source="Apps/TestApp/View/authPrompt_View.xaml" Margin="0,0,0,191.2" />
</TabItem>
总是如此,当我输入我的问题时,我意识到从知识差距的角度来看我需要解决多少领域。任何见解和/或帮助表示赞赏!
答案 0 :(得分:0)
为了能够访问主视图对象,您必须从要从中访问它的类创建它的实例。
ScratchPad name = new ScratchPad();
现在您应该可以使用以下内容访问便笺簿:
name.updateStatus.scratchPadTextBox
答案 1 :(得分:0)
但是我相信为了做到这一点,我需要将对MainWindow对象的引用传递给想要写入该文本框的每个类。
您可以使用MainWindow
集合获取对Application.Current.Windows
的现有实例的引用:
MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
if(mainWindow != null)
{
//...
}