从另一个窗口更改页面上的标签C#wpf

Lar*_*ele 2 c# wpf dispatcher

我已经创建了一个带有NavigationWindow的应用程序,并在其中加载了页面。这也是该项目中的另一个(正常)窗口。这些窗口/页面的名称:

NavigationWindows: MainWindows
Page: Page1
Window: TwitterConnect
Label on Page: label4
Run Code Online (Sandbox Code Playgroud)

我的Page1上有一个标签,我想从TwitterConnect更改它。因为我创建了Page1的新实例来调用方法ConnectToTwitter(),所以页面上的标签不会更新。这是TwitterConnect背后代码中的代码:

        private void button1_Click(object sender, RoutedEventArgs e)
        {  
            string pin = twitpin.Text;    

            Page1 page = new Page1();

            page.ConnectToTwitter(pin, genratedToken);

            this.Close();     
        }
Run Code Online (Sandbox Code Playgroud)

我在Google上搜索以找到解决方案,但我不明白。我认为这与Dispatcher有关?!

我真的是C#,VS10express和WPF的初学者。

如何从TwitterConnect更改label4?您能用一小段代码解释一下吗?

ali*_*ray 5

您正在从TwitterConnect窗口中创建Page1.xaml的新实例。您需要做的是找到一种访问Page1.xaml当前实例的方法,该方法可以通过使用Window类的DataContext属性轻松实现。

Page1.xaml.cs

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    TwitterConnect twitterWindow = new TwitterConnect();
    // this gives TwitterConnect access to Page1's label4 property
    twitterWindow.DataContext = this;
    twitterWindow.Show();
}
Run Code Online (Sandbox Code Playgroud)

TwitterConnect.xaml.cs

private void ButtonClick(object sender, RoutedEventArgs e)
{
    Page1 page1 = (Page1)this.DataContext;

    string pin = twitpin.Text;    
    page1.ConnectToTwitter(pin, genratedToken);
    // Then you can update the label like so:
    page1.Label4.Text = "The text you want to display on the label";
    this.Close();   
}
Run Code Online (Sandbox Code Playgroud)

如果我错过了任何事情,请告诉我。另外,我强烈建议您不要使用此配置,因为它可能成为维护的噩梦。一个更好的办法可能是添加一个方法或属性到Page1.cs处理设置上的文字label4