2016-06-10 18 views
-1

Ich versuche jedes Mal, wenn die Schaltfläche angeklickt wird, 1 zum Labelinhalt hinzuzufügen, aber ich muss es in seiner eigenen Klasse tun (es muss Iron Mining sein, wenn das Mining seine eigene hat) Klasse).Jedes Mal, wenn die Schaltfläche geklickt wird, wird MVVM verwendet.

public class Mining 
{ 
    public static int iron = 0; 
    public void mine_iron_Click(object sender, RoutedEventArgs e) 
    { 
     iron++; 
     label.Content = Convert.ToString(iron); 
    } 
} 

Wenn ich diesen Code in Mining-Klasse verwende, gibt es mir einen Fehler, das Label sagen tut in aktuellem Inhalt existiert nicht. Wie kann ich das Label von dieser Klasse aus erreichen? Ich habe mir gedacht, dass ich MVVM verwende, irgendwelche Ideen, wie man diesen einfachen Code im MVVM-Muster implementiert?

+5

Sie greifen nicht auf die Beschriftung von der Klasse zu, binden Sie * den Inhalt der Beschriftung an eine Ansichtsmodell * -Eigenschaft *, die Änderungsbenachrichtigungen auslöst. Das ist ziemlich einfach MVVM, also würde ich vorschlagen, einige Tutorials oder ähnliches zu finden. –

+1

Das klingt wie eine College-Aufgabe. Es sieht so aus, als ob Sie versuchen, die Benutzeroberfläche direkt zu ändern, was Sie in MVVM nicht tun sollten. Auf der Grundlage dieses kleinen Codeausschnitts sieht es so aus, als hätten Sie ein größeres Missverständnis darüber, wie Sie ViewModel-Eigenschaften erstellen und sie in der Benutzeroberfläche binden. In einer SO-Frage ist dies jedoch schwierig zu lösen. Ich würde empfehlen, durch https://msdn.microsoft.com/en-us/magazine/dd419663.aspx zu lesen, um sicherzustellen, dass Sie die Konzepte verstehen. –

Antwort

0
Mining mining =new mining(passlablelhere); 

var lbl = ""; 
Public Mining(string labelfromview) 
{ 
    lbl =labelfromview;//here you can perform the logic 
} 
+0

Nicht viel zum Ändern des Etiketteninhalts, und es ist auch nicht MVVM. –

0

Erster INotifyPropertyChanged implementieren und dann binden die Eisen-Eigenschaft auf Eisen

public class Mining : INotifyPropertyChanged 
{ 
    public static int _iron 
    public int iron 
    { 
     get { return _iron; } 
     set 
     { 
      _iron = value; 
      OnPropertyChanged("iron"); 
     } 
    } 
    public void mine_iron_Click(object sender, RoutedEventArgs e) 
    { 
     iron++; 
    } 
    protected void OnPropertyChanged(string Name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(Name)); 
     } 
    } 
} 

Sicherstellen, dass die Datacontext eines Vorfahren Bergbau ist, fügen Sie dann das Etikett zu XAML.

Verwandte Themen