WPF-MVVM-textBox Text Verbindlich

Bin ich gerade erste Schritte mit dem MVVM-also entschuldigt, wenn ich getan habe, etwas wirklich dummes. Ich habe versucht, das schreiben ein sehr einfacher test, um zu sehen, ob ich könnte mich an alles erinnern, und für das Leben von mir ich kann nicht sehen, warum es nicht funktioniert.

In meiner Sicht ich habe eine textBox, wo Sie seine text-Eigenschaft gebunden ist, auf einen Wert im ViewModel. Dann beim drücken einer Taste der Wert sollte geändert werden und das Textfeld zu aktualisieren.

Kann ich den Wert nicht verändern (ich habe eine MessageBox.Show() Zeile in der buttom drücken Sie command), aber das Textfeld nicht aktualisiert.

Ich gehe davon aus, dass dies bedeutet, ich habe nicht richtig umgesetzt INotifyPropertyChanged Fall richtig, aber bin nicht in der Lage, um zu sehen, mein Fehler.

Kann jemand mich in die richtige Richtung?

Hier ist der code:

Ansicht

<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">

<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
    <TextBox Height="40" Width="200" Text="{Binding helloWorld.Message, UpdateSourceTrigger=PropertyChanged}"/>
    <Button Command="{Binding UpdateTimeCommand}">Update</Button>
</StackPanel>
</Window>

Hinter Ansicht

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel.MainWindowViewModel();
    }
}

ViewModel

namespace Mvvm.ViewModel
{
internal class MainWindowViewModel
{
    private HelloWorld _helloWorld;

    ///<summary>
    ///Creates a new instance of the ViewModel Class
    ///</summary>
    public MainWindowViewModel()
    {
        _helloWorld = new HelloWorld("The time is " + DateTime.Now.ToString("HH:mm:ss"));
        UpdateTimeCommand = new Commands.UpdateTimeCommand(this);
    }

    ///<summary>
    ///Gets the HellowWorld instance
    ///</summary>
    public HelloWorld helloWorld
    {
        get
        {
            return _helloWorld;
        }
        set
        {
            _helloWorld = value;
        }
    }

    ///<summary>
    ///Updates the time shown in the helloWorld 
    ///</summary>
    public void UpdateTime()
    {
        helloWorld = new HelloWorld("The time is " + DateTime.Now.ToString("HH:mm:ss"));
    }

    public ICommand UpdateTimeCommand
    {
        get;
        private set;
    }
}

Modell

namespace Mvvm.Model
{
    class HelloWorld : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public HelloWorld(string helloWorldMessage)
        {
            Message = "Hello World! " + helloWorldMessage;
        }

        private string _Message;
        public string Message
        {
            get
            {
                return _Message;
            }
            set
            {
                _Message = value;
                OnPropertyChanged("Message");
            }
        }

        private void OnPropertyChanged(string p)
        {
            PropertyChangedEventHandler handler = PropertyChanged;

            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(p));
            }
        }
    }
}

Befehle

namespace Mvvm.Commands
{
    internal class UpdateTimeCommand : ICommand
    {
        private ViewModel.MainWindowViewModel _viewModel;
        public UpdateTimeCommand(ViewModel.MainWindowViewModel viewModel)
        {
            _viewModel = viewModel;
        }

        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public void Execute(object parameter)
        {
            _viewModel.UpdateTime();
        }
    }
}

Sorry für so ein langer post und es wird ein spot-mein Fehler-post, aber ich habe es für so lange und ich weiß nicht, was ich falsch mache

Dank!

Ich vermute, dass Sie auch brauchen, um eine Eigenschaft ändern, die Benachrichtigung auf der helloWorld Eigenschaft, da Sie den verbindlichen Pfad helloWorld.Message.

InformationsquelleAutor Nick Williams | 2012-12-06

Schreibe einen Kommentar