2010-11-02 7 views
2

J'ai cherché beaucoup de sujets mais c'est déjà trop compliqué à comprendre. Je ne vois même pas le this.Invoke(); méthode.Comment implémenter la méthode Invoke?

Voici mon scénario:

Je possède ce UserControl appelé test1.xaml et il a un contrôle cadre appelé frame1

test1.xaml.cs Fondamentalement contient

public test1() 
    { 
     InitializeComponent(); 
      this.frame1.Content = new test(); 
    } 

Ensuite, je un autre usercontrol appelé test2.xaml et je voudrais qu'il ait un bouton appelé button1. Ce que je veux arriver, c'est que lorsque test2.xaml est chargé et que l'utilisateur clique sur le bouton, je voudrais passer sa page de navigation à la page suivante.

public test2() 
    { 

     InitializeComponent(); 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     MainWindow MW = Application.Current.MainWindow as MainWindow; 
     MW.label1.Content = MW.tabControl.SelectedIndex; 
     TabItem page = MW.tabControl.SelectedItem as TabItem; 
     test1 a = new test1(); 
     a.frame1.Navigate(new Uri(@"/UserControls/salesBtn.xaml", UriKind.Relative)); 

    } 

Ceci est le code que j'ai dans mon test2.xaml.cs. Maintenant, je sais que je me trompe sur un événement de clic sur un bouton, car je ne fais qu'instancier un nouveau contrôle utilisateur et ne pas référencer le contrôle réel qui n'est plus en cours d'exécution. Comment invoquer ou comment faire pour que le cadre de test1.xaml accède au chemin indiqué?

+3

En WPF, vous devez utiliser this.Dispatcher.Invoke() –

+0

Pourriez-vous donner les arguments pour je dois passer ma méthode Invoke? –

+0

Mise à jour 1: Bonjour, j'ai essayé this.Dispatcher.Invoke ((System.Windows.Forms.MethodInvoker) délégué {a.frame1.Navigate (nouveau Uri (@ "/ UserControls/salesBtn.xaml", UriKind.Relative)); }); ... Mais cela n'a pas fonctionné. –

Répondre

3

Je ne voudrais juste manipuler la propriété de contrôle d'une autre classe

ensuite l'exposer comme méthode publique.

Par exemple:

public class MyFirstObject { 
    private string MyValue {get;set;} 
    public void UpdateMyValue(string newValue) { MyValue = newValue; } 
} 

public class MySecondObject { 
    MyFirstObject myFirstObject; 
    public MySecondObject { 
    myFirstObject = new MyFirstObject; 
    myFirstObject.UpdateMyValue("someNewValue"); 
    } 
} 
+0

Pour ceux qui suivent à la maison (ou sur les flux non statiques) le journal de discussion en cours commence ici http://chat.stackoverflow.com/transcript/message/71248#71248 – jcolebrand

+0

Drach m'a aidé sans avoir à utiliser la méthode Invoke. Il suffit de faire référence à la classe correctement. Merci drach! –

+0

@lnluis à tout moment, ça ne me dérangeait pas du tout une fois que j'ai compris ce que tu avais – jcolebrand

Questions connexes