2017-03-26 4 views
0

Ich entwickle UWP-Anwendung. Ich möchte ui Element (Kippschalter) vom Hintergrundgewinde zurückgreifen. Ich habe eine Methode entwickelt, mit der ich den Status des Kippschalters (ein- oder ausgeschaltet) bekommen kann. Und wenn ich versuche, mit dieser Methode einen Wert zu erhalten, bekomme ich immer den gleichen Wert des Kippschalters.Immer den gleichen Wert beim Zugriff auf UI-Element

Meine Methode ist wie folgt.

public bool GetMoldState 
{ 
    get { return MoldTry.IsOn; } 
} 

Und von Hintergrund thread ich Zugriff ui Element wie folgt.

await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
() => 
{ 
    MainPage mp = new MainPage(); 
    isMoldTryOn = mp.GetMoldState; 
} 
); 

Wie kann ich den aktuellen Status der Kippschalter richtig erhalten?

+1

Jedes Mal, wenn Sie eine neue Instanz von Mainpage erstellen, so erhalten Sie den gleichen Wert. Wenn Sie einen Wert für Ihr * MainPage * -Steuerelement erhalten möchten, müssen Sie es verfügbar machen, damit es von anderen Methoden aus zugänglich ist, oder besser über * Binding *, und prüfen Sie die entsprechende Eigenschaft. – Romasz

+0

tatsächlich habe ich versucht, Instanz einmal zu erstellen (wenn Hintergrundthread startet) und Zugriffswert, aber immer noch den gleichen Wert. Wie kann ich die Hauptseite veröffentlichen? – Cozdemir

Antwort

4

Sie erstellen immer dann eine neue Instanz der MainPage, wenn Sie versuchen, den Wert zu erhalten, anstatt die Instanz zu verwenden, die erstellt wird, wenn Ihre App auf die Seite navigiert.

Ich empfehle die Verwendung public static Eigenschaft in der MainPage mit denen Sie in der Lage sein werden, Werte der tatsächlich verwendeten Instanz zu erhalten.

public static MainPage Current { get; private set; } 

public MainPage() 
{ 
    Current = this; 
    // Other things 
} 

Dann werden Sie in der Lage sein, es Werte für den Zugriff von überall wie folgt aus:

await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
() => 
{ 
    isMoldTryOn = MainPage.Current.GetMoldState; 
} 
); 
+0

Es funktioniert! Vielen Dank euch beiden. – Cozdemir

Verwandte Themen