从应用程序中的不同类更新文本框

时间:2017-04-20 00:38:32

标签: c# wpf xaml

我在这里阅读了许多类似的帖子,但我仍然有一些问题不仅关于如何实现这一点,而且还有一个更好或更合适的方法来实现这一目标。这就是我有一个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>

总是如此,当我输入我的问题时,我意识到从知识差距的角度来看我需要解决多少领域。任何见解和/或帮助表示赞赏!

2 个答案:

答案 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)
{
    //...
}