我用一个带有页面的NavigationWindow创建了一个应用程序。也是这个项目中的另一个(普通)窗口。 这些窗口/页面的名称:
NavigationWindows: MainWindows
Page: Page1
Window: TwitterConnect
Label on Page: label4
我的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();
}
我搜索谷歌寻找解决方案,但我没有得到它。 我认为它与Dispatcher有关?!
我真的是C#,VS10express和WPF的初学者。
如何从TwitterConnect更改label4? 你能用一段代码解释一下吗?
答案 0 :(得分:4)
您正在从 TwitterConnect 窗口创建 Page1.xaml 的新实例。您需要做的是找到一种方法来访问 Page1.xaml 的当前实例,这可以通过使用 Window的 DataContext 属性轻松实现 em> class。
<强> 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();
}
<强> 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();
}
如果我错过了什么,请告诉我。此外,我强烈反对这种配置,因为它可能成为维持的噩梦。更好的方法可能是在 Page1.cs 上添加方法或属性,以处理 label4 上的文本设置。
答案 1 :(得分:0)
如果我已正确理解您的问题,则需要刷新控件。
这是一个新类
public static class ExtensionMethods
{
private static Action EmptyDelegate = delegate() { };
public static void Refresh(this UIElement uiElement)
{
uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
}
}
这是您班级中的示例方法 (第1页?)
private void LoopingMethod()
{
for (int i = 0; i < 10; i++)
{
label1.Content = i.ToString();
label1.Refresh();
Thread.Sleep(500);
}
}
请查看此link