החלפת קונטקס של כפתור בזמן ריצה דרך MVVM

24 בNovember 2013

תגיות: , ,
אין תגובות

הדוגמא שאציג עכשיו היא בסיסית ונכתבה לבקשת סטודנט..

מה הרעיון:
ניקח נגן מוזיקה מולטימדיה סטנדרטי (ברכב או בבית )יש לי כפתור הדלקה של מוזיקה, ויש לי כפתור כיבוי של מוזיקה.
טוב , לא מדוייק לפעמים יש לי כפתור הדלקה ואותו כפתור גם מכבה בלחיצה הבאה, ז”א הכפתור משנה את הContext שלו בהתאם למצב.
מכונת מצבים כזאת יכולה כמובן לתמוך ביותר משני מצבים אבל אז המשתמש לא יבין מה קורה אז זה טוב לוגית ולא ויזואלית.
(ממליץ לקרוא על State) אז לכאורה בצד הUI שלנו הכי קל זה בכל לחיצה להרים דגל בוליאני ולשנות את הכפתור בהתאם.
בMVVM בסך הכל נבקש מהCommand שינהל את הלוגיקה הזאת.
private bool StateFlag;


        private string m_buttonHeaderText;

        public string ButtonHeaderText

        {

            get { return m_buttonHeaderText; }

            set {

                m_buttonHeaderText = value;

                if (PropertyChanged != null)

                {

                    PropertyChanged(this, new PropertyChangedEventArgs("ButtonHeaderText"));

                }

            }

        }


        public ICommand ButtonStateCommand

        {

            get

            {

                return new DlegateCommand(onOfStateButton);

            }

        }



        private void onOfStateButton()

        {

            if (!StateFlag)

            {

                ButtonHeaderText = "Cancel";

                StateFlag = !StateFlag;

                stateManager();

            }

            else

            {

                ButtonHeaderText = "Start";

                StateFlag = !StateFlag;

                stateManager();

            }

        }


        private void stateManager()

        {

            switch (StateFlag)

            {

                case false:

                    {

                        //go right..

                        break;

                    }


                default:

                    {

                        //go left...

                        break;

                    }


            }

        }



במקרים מורכבים יותר לא נרצה לקבל CallBack שהפעולה הצליחה ואז לשנות את הState.
במקרים כאלה נירשם לEvent שיגדיר התהליך של כל פעולה וחוזר אלינו עם הצליח או נכשל.
הוסף תגובה
facebook linkedin twitter email

Leave a Reply

Your email address will not be published. Required fields are marked *