Изменить ярлык на странице из другого окна C # wpf - PullRequest
2 голосов
/ 27 мая 2011

Я сделал приложение с NavigationWindow с загруженной в него страницей. Также есть другое (нормальное) окно в этом проекте. Названия этих окон / страниц:

NavigationWindows: MainWindows
Page: Page1
Window: TwitterConnect
Label on Page: label4

У меня есть ярлык на моей странице Page 1, и я хочу изменить его на 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();     
        }

Я искал в Google, чтобы найти решение, но не получил его. Я думаю, это как-то связано с Диспетчером?!

Я действительно новичок в C #, VS10express и WPF.

Как я могу изменить label4 из TwitterConnect? Можете ли вы объяснить это с помощью фрагмента кода?

Ответы [ 2 ]

5 голосов
/ 27 мая 2011

Вы создаете новый экземпляр Page1.xaml из окна TwitterConnect .Что вам нужно сделать, так это найти способ доступа к текущему экземпляру Page1.xaml , который можно легко получить, используя свойство DataContext класса Window .

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 .

.
0 голосов
/ 27 мая 2011

Если я правильно понял ваш вопрос, вам нужно обновить контроль.

это новый класс

public static class ExtensionMethods
{
 private static Action EmptyDelegate = delegate() { };

 public static void Refresh(this UIElement uiElement)
 {
  uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
 }
}

это пример метода вашего класса (page1?)

private void LoopingMethod()
{
for (int i = 0; i < 10; i++)
{
  label1.Content = i.ToString();
  label1.Refresh();
  Thread.Sleep(500);
}
}

пожалуйста, проверьте эту ссылку

...