locked
Why does my GUI not refresh although I have implemented Binding (MVVM) RRS feed

  • Question

  • User85769 posted

    Hi Guys,

    So the point of complete desperation has arrived... I work with Xamarin.Forms and MVVM. I created a Content page containing a StackLayout. Then I added a Child to the StackLayout wich contains a ScrollView. Here is the code of the child:

    namespace VCP_Touch
    {
        public partial class Ruhestand : ScrollView
        {
            public Ruhestand ()
            {
                    InitializeComponent ();
            }
        }
    }
    

    and the Xaml:

    <?xml version="1.0" encoding="UTF-8"?>
    <ScrollView xmlns="http://xamarin.com/schemas/2014/forms" 
                xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
                xmlns:local="clr-namespace:VCP_Touch;assembly=VCP_Touch"
                x:Class="VCP_Touch.Ruhestand"
                Orientation="Horizontal">
        <ScrollView.BindingContext>
            <local:RuhestandModel />
        </ScrollView.BindingContext>
        <StackLayout>
            <Label  Text="{Binding Eingabe}"
                    IsVisible="true"/>
    
            <Button Text="Refresh"
                    Command="{Binding Refresh}"
                    HorizontalOptions="FillAndExpand"/>
        </StackLayout>
    </ScrollView>
    

    I added a ViewModel, which is named "RuhestandModel":

    namespace VCP_Touch
    {
        public class RuhestandModel : INotifyPropertyChanged
        {
            public RuhestandModel ()
            {
                Eingabe = "Default";
    
                this.Refresh = new Command ((nothing) => {
                    VO_Datenerfassung test2 = new VO_Datenerfassung ();
                    this.Eingabe = test2.Interessent.Vorname;
                });
            }
            string _Eingabe;
    
            public string Eingabe {
                get {
                    return _Eingabe;
                }
                set {
                    if (_Eingabe != value) {
                        _Eingabe = value;
                        OnPropertyChangedModel ("Vorname");
                    }
                }
            }
            public ICommand Refresh { protected set; get; }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected virtual void OnPropertyChangedModel(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, 
                        new PropertyChangedEventArgs(propertyName));
                }
            }
        }
    }
    

    "VODatenerfassung" is a class, containing several Properties. It can be changed with another button (and it works!!)...The code is not displayed here. Coming to my problem. Principly the code works fine! When I click the "Refresh" button, the Command Refresh in the constructor "public RuhestandModel ()" is activated. Then also the field "Eingabe" is changed. But on the GUI the text of the Label (which is bound to Eingabe) does not change. Where is my fault? I looked at all the examples on the Xamarin Developpers page and I searched the Forum, but I did not found any answer. You see, I'm truly desperate, because the Binding thing HAS to work, otherwise App programming is not possible... Thanks in advance!

    Ben

    Monday, January 19, 2015 4:57 PM

Answers

  • User181 posted

    The string you pass in OnPropertyChangedModel in the setter for Eingabe does not match the property name (you have "Vorname" instead of "Eingabe").

    • Marked as answer by Anonymous Thursday, June 3, 2021 12:00 AM
    Monday, January 19, 2015 5:00 PM

All replies

  • User181 posted

    The string you pass in OnPropertyChangedModel in the setter for Eingabe does not match the property name (you have "Vorname" instead of "Eingabe").

    • Marked as answer by Anonymous Thursday, June 3, 2021 12:00 AM
    Monday, January 19, 2015 5:00 PM
  • User85769 posted

    ahhh, that's how it works :smile: ..Thanks a lot

    Monday, January 19, 2015 5:03 PM