none
MVVM - Mit Button Wert in meiner View verändern RRS feed

  • Frage

  • Hallo.

    Ich habe folgendes Problem und ich finde zurzeit auch keine Lösung dafür:

    Ich möchte gerne in meiner View auf den Button Klicken und im Model soll der Wert dann geändert und an die TextBox zurück gegeben werden. 

    Hier der Quellcode:

    View:

    <Window x:Class="MVVM.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
       
            <Grid>
            <TextBox HorizontalAlignment="Left" Height="23" Margin="188,34,0,0" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Top" Width="120"/>
            
            <Button Content="1" HorizontalAlignment="Left" Margin="215,185,0,0" VerticalAlignment="Top" Width="75"/>
    
    
    
    
        </Grid>
        
    </Window>

        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                this.DataContext = new ErgebnisViewModel(Model.CreatePerson());
            }
        }
    }

    View Model:

     class ErgebnisViewModel : INotifyPropertyChanged
        {
            private Model _Model;
    
            //  Konstruktor
    
            public ErgebnisViewModel(Model model)
            {
                _Model = model;
                _Ergebnis = _Model.Ergebnis;
              
            }
    
            // Schnittstellen-Ereignis
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected internal void OnPropertyChanged(string propertyname)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
            }
    
            // Eigenschaften
    
            private string _Ergebnis;
            public string Name
            {
                get { return _Ergebnis; }
                set
                {
                    if (_Ergebnis == value) return;
                    _Ergebnis = value;
                    OnPropertyChanged("Ergebnis");
                }
            }
    
    
        }

    und Model:

     public class Model
        {
            
                public string Ergebnis { get; set; }
                
    
                public static Model CreatePerson()
                {
                    return new Model { Ergebnis = "0"};
                }
            
        }

    Danke für jede Antwort.

    Gruß Flier :)

    Freitag, 12. Juli 2013 07:52

Antworten

  • Hi Peter,

    ich denke das Problem wurde jetzt schon hier gelöst.

    http://social.msdn.microsoft.com/Forums/de-DE/120a060d-4fbd-4019-b13d-ed3a34103505/mvvm-textfeld-aktualisieren

    MFG

    Björn

    • Als Antwort markiert Flier94 Dienstag, 16. Juli 2013 09:20
    Montag, 15. Juli 2013 19:34

Alle Antworten

  • Hi Flier,

    du kannst an den Button ein Command binden.

    Schau dir mal das Tutorial an.

    Im Command kannst du dann denn Wert ändern und wenn du die Textbox an das Property Gebunden hast,

    sollte durch das PropertyChanged Event die Textbox aktualisiert werden.

    MFG

    Björn


    • Bearbeitet Palin Freitag, 12. Juli 2013 08:20 Rechtschreibung
    • Als Antwort markiert Flier94 Freitag, 12. Juli 2013 09:31
    • Tag als Antwort aufgehoben Flier94 Freitag, 12. Juli 2013 09:31
    Freitag, 12. Juli 2013 08:19
  • Hmm. So in der Art hatte ich das auch schon gehabt. Mein Problem ist nur, dass ich nicht genau verstehe, wie ich mit dem Button die Property verändern kann. Könntest du mir einen kleinen Lösungsansatz geben? Ich will das nur verstehen, wie das geht.

    Gruß

    Flier


    • Bearbeitet Flier94 Freitag, 12. Juli 2013 09:31 Rechtschreibfehler
    Freitag, 12. Juli 2013 09:03
  • Hi Flier,

    hast du dir mal das Tutorial angeschaut?

    Im Execute kannst du dann das Property setzen.

     private void MyCommandExecute(object sender, ExecutedRoutedEventArgs e)
      {
        this.Name = "Wert";
      }

    MFG

    Björn

    Freitag, 12. Juli 2013 09:45
  • Hallo Björn.

    Also ich habe das genau so übernommen. Jetzt geht er aber nicht in die Execute rein wenn ich den Button drücke. 

    Mein Button sieht so aus:

    <Button Content="1" HorizontalAlignment="Left" Command="{Binding Eingabe}" Margin="215,185,0,0"  VerticalAlignment="Top" Width="75"/>

    und die Execute so:

       private void Eingabe(object sender, ExecutedRoutedEventArgs e)
            {
                this._Ergebnis = "4";
            }
    

    Muss noch was dazu?

    Danke für die Hilfe!

    Gruß

    Flier

    Freitag, 12. Juli 2013 10:00
  • Hi Flier,

    hast du das ICommand Interface implementiert und das Command zugeordnet.

    <Window.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Close"
                        Executed="CloseCommandHandler"
                        CanExecute="CanExecuteHandler"
                        />
      </Window.CommandBindings>

    Hier nochmal ein Beispiel.

    MFG

    Björn

    Freitag, 12. Juli 2013 10:21
  • Ich habe es versucht. Irgendwie geht es nicht. Leider verstehe ich die meisten Beispiele nicht, da ich noch nicht so gut in MVVM bin. Ich habe das ICommand Interface eingefügt. Leider kann ich nichts im Ergebnis ändern :(
    Montag, 15. Juli 2013 08:34
  • Ich habe schon einen Taschenrechner Programmiert, jedoch ist dieser nicht komplett in MVVM. Was muss ich denn noch machen, damit er in MVVM ist?

    Hier ist der Link:

    https://www.dropbox.com/sh/49fd9dg8qy3xeqo/OM0D5kC9CO

    Gruß Flier

    Montag, 15. Juli 2013 09:05
  • Hi,
    kannst Du das Programm nicht mit Windows-Mitteln komprimieren. Der AppStore zeigt mit 14 Apps zur Dekomprimierung an. Welche wäre am besten geeignet, möglichst kostenlos?

    --
    Peter

    Montag, 15. Juli 2013 09:51
  • Hi Peter.

    Lade dir einfach WinRar runter. Damit habe ich es auch Komprimiert.

    Gruß Flier


    • Bearbeitet Flier94 Montag, 15. Juli 2013 09:59 Änderung
    Montag, 15. Juli 2013 09:59
  • Hi,

    Winrar steht als App nicht im AppStore zur Verfügung.

    Nebenbei gefragt: Warum kannst Du, wenn Du unter Windows programmierst, nicht die zur Verfügung stehenden Techniken nutzen und erwartest, dass sich Helfer an Deine Forderungen anpassen und nur um zu helfen Fremdsoftware installieren müssen, die sonst nicht benötigt wird?

    Vielleicht kannst Du hier das eigentliche Problem mit einer kleinen Demo mal darstellen.

    --
    Peter

    Montag, 15. Juli 2013 13:16
  • Hi Peter,

    ich denke das Problem wurde jetzt schon hier gelöst.

    http://social.msdn.microsoft.com/Forums/de-DE/120a060d-4fbd-4019-b13d-ed3a34103505/mvvm-textfeld-aktualisieren

    MFG

    Björn

    • Als Antwort markiert Flier94 Dienstag, 16. Juli 2013 09:20
    Montag, 15. Juli 2013 19:34