Behaviors חלק 8 – איך מממשים Drag and Drop ב MVVM ע"י שימוש ב Behaviors

יום שלישי, אוגוסט 14, 2012

בפוסט הקודם ראינו איך נראית הדרך הנאיבית לממש Drag and Drop ב WPF. בפוסט הנוכחי נראה איך לממש Drag and Drop ע”י Behaviors בצורה שהיא נוחה ל MVVM. כתיבת ה Behavior בדומה לפוסט הקודם, המטרה שלנו היא לאפשר פעולת Drag and Drop מהמלבן לכפתור: הפעם, במקום להרשם ב CodeBehind לארוע, נעשה זאת ע”י Behavior.ניצור Behavior חדש בשם DraggableBehavior, שאפשר לחבר על כל אלמנט שיורש מ FrameworkElement: 1: public class DraggableBehavior : Behavior<FrameworkElement> 2: { 3:  4:  5: } נממש את המתודה OnAttached, ובה נרשם לאירוע PreviewMouseLeftButtonDown: 1:...
תגיות: , , ,
2 תגובות

Behaviors חלק 7 – איך מממשים Drag and Drop ב WPF ע"י Code Behind

בפוסט הקודם ראינו איך פותרים את בעיית ה Commands ב MVVM ע”י שימוש ב Behaviors. בפוסטים הבאים נתחיל לחקור הרבה בעיות ש Behaviors מפשטים, כשנתחיל עם Drag and Drop.אחת הפעולות הסטנדרטיות שמממשים לעיתים קרובות היא Drag and Drop. לממש Drag and Drop ב WPF יחסית קל היות ויש תמיכה טובה מאוד של התשתית עבור זה, אבל יחד עם זאת הפתרון הבסיסי עדיין רחוק מלהיות אלגנטי.כדוגמא, ניקח את המסך הבא, בו נרצה לממש Drag and Drop מהמלבן לעבר הכפתור.פעולת ה Drag and Drop תתחיל כשנמקם את סמן העכבר מעל למלבן, נלחץ על הכפתור השמאלי ונתחיל לגרור. בשביל זה צריך להרשם...
תגיות: , , ,
אין תגובות

Behaviors חלק 6– פתרון בעיית ה Commands ב MVVM

יום שישי, אוגוסט 10, 2012

בפוסט הקודם ראינו איך כותבים Action מאפס בעצמנו. בפוסט הנוכחי נראה את אחד השימושים הכי שימושיים ב Actions – ולמעשה איך נפתרת אחת הבעיות המציקות בשימוש ב Commands תחת MVVM. בעיית ה Commands.תחת MVVM, הדרך היחידה לחבר בין ה View לבין ה ViewModel זה על ידי Binding ו Commands. כך מתקבלת הפרדה טובה יותר מאשר הייתה לפני כן.בגדול, המידע יעבור בין ה ViewModel ל View ע”י Binding, ופעולות יעברו מה View ל ViewModel על ידי Commands.כדוגמא, ניצור חלון שמחובר ל ViewModel. ב ViewModel נגדיר Command בסיסי (אני משתמש ב RelayCommand מתוך MVVM Light). כך יראה ה ViewModel:  1:...
תגובה אחת

Behaviors חלק 4 – שימוש ב TriggerActions

יום שישי, יולי 6, 2012

בפוסט הקודם ראינו איך יוצרים Behavior, התנהגות, בצורה עצמאית מאפס.התנהגויות באות למעשה בשני סוגים, כשלשניהם קוראים בשם הכללי Behaviors: ה Behaviors שראינו עד עכשיו, ו TriggerActions שמספק טיפה יותר שליטה על *מתי* הפעולה מופעלת. למעשה Behavior מוסיף התנהגות שלמה שפשוט מוסיפים על אלמנטים בזאמל, בעוד Actions מאפשרים לנו להפעיל פעולה מסוימת, כשאנו יכולים לקבוע מתי הפעולה הזו תקרה – כתגובה לאיזה אירוע.איך מוסיפים Action?  בפוסט הבא נראה איך יוצרים TriggerAction משלנו מאפס.
אין תגובות

Behaviors חלק 2 – הוספה מויז'ואל סטודיו

יום רביעי, יוני 6, 2012

בפוסט הקודם ראינו איך להוסיף Behaviors דרך בלנד, בפוסט הזה נוסיף Behaviors דרך ויז’ואל סטודיו.נפתח פרוייקט חדש, ונוסיף רפרנסים לשני DLL-ים: (שימו לב כי זה נמצא תחת Extensions, היות וזה חלק מה SDK של בלנד)1. System.Windows.Interactivity – ה-DLL הראשי של Behaviors -במידה ובלנד לא מותקן, גם ה SDK יהיה חסר – אפשר להוריד אותו מכאן:http://www.microsoft.com/en-us/download/details.aspx?id=10801 2. Microsoft.Expression.Interactions – ב DLL הזה יש כמה Behaviors שכבר מוכנים (אנחנו הולכים להשתמש בשניים כאלו) בשביל לעבוד עם Behaviors יש לרשום את הnamespace של System.Windows.Interactivity. (בדר”כ עם הקיצור i). <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"...
תגיות: , , ,
6 תגובות

Behaviors חלק 1 – שימוש בבלנד

יום שלישי, יוני 5, 2012

בפוסט הקודם ראינו למה Behaviors זה פיצ'ר כל כך משמעותי וחזק. הפיצ’ר המשמעותי ביותר שהתוסף בגרסה 4 של WPF הוא ללא ספק Behaviors.ל - Behaviors יש הרבה מאוד כוח, ומאפשר פיתוח הרבה יותר אלגנטי. בנוסף, כמעט כל בעיה ב MVVM נפתרת ע”י שימוש יצירתי ב Behaviors.הפוסט הזה הוא פוסט ראשון בסדרת פוסטים על Behaviors.איך מוסיפים Behaviors בצורה הכי פשוטה? – אם אתם עדיין לא משתמשים ב Blend, בהחלט הגיע הזמן להתחיל..(כדאי מאוד לראות ב 720p) בפוסט הבא נראה איך מוסיפם Behaviors מתוך ויז'ואל סטודיו
תגיות: , , , , ,
תגובה אחת

עשר הטעויות הנפוצות ביותר ב MVVM שכמעט כל אחד נופל בהן

יום ראשון, אפריל 29, 2012

קיבלתי לא מעט תגובות על הפוסט הקודם שלי – הפיכת ה Code behind ל ViewModel ב WPF – כשחלקן גרמו לי לחשוב עוד פעם כמה חסר תיעוד מסודר של MVVM. יש המון חומר כתוב באינטרנט, אבל רובו המוחלט לא מסודר, לא מדוייק, ואפילו לפעמים ממש מטעה.המצב עד כדי כך מורכב שכמעט לא יוצא לי לייעץ בחברה בה לא נופלים לטעות כזו או אחרת, היות ולא מעט טעויות השתרשו כפתרונות לגיטימיים במהלך השנתיים האחרונות.שתי תגובות קלאסיות שקיבלתי יותר מפעם אחת היו:1. “ב MVVM לפעמים ה ViewModel משרת כמה View-ים, והדרך שהצגת בפוסט מאפשרת רק יחס של 1:1”2. “בפוסט למעשה הורדת...
תגיות: , , , , , , ,
3 תגובות

איך ליצור Binding ללא כתיבת קוד–ע”י שימוש בBinding Wizard של VS2010

יום רביעי, אפריל 25, 2012

שאלה שנשאלה בפורום WPF –ש: כשכותבים Binding ב WPF יש אינטיליסנס (השלמת כתיבה) חלקית בלבד. האם יש דרך שויז’ואל סטודיו ישלים את מה שאנחנו כותבים?ת: האמת היא שיש - החל מויז'ואל סטודיו 2010 - והדרך הכי טובה לראות איך זה עובד זה ע"י הדגמה של היכולת (מומלץ לראות באיכות גבוהה - 720p):
תגיות: , , , , ,
אין תגובות

איך לגרום ל WPF להתנהג כאילו ש MVVM באמת נתמך מהקופסא – להחליף בין ה Code Behind ל ViewModel !

יום שלישי, אפריל 24, 2012

יוצא לי ללמד MVVM לעיתים די קרובות, וכמעט תמיד עולה השאלה למה WPF לא תומך בזה “בילט אין”.הרי CodeBehind ו ViewModel בסופו של יום מאוד דומים, ההבדל הוא רק ש ViewModel הוא מחלקה נפרדת לחלוטין ולפיכך ההפרדה בין הלוגיקה לבין הUI חזקה יותר.כשמממשים MVVM, ויזו’ואל סטודיו לא יודע על הקישור בין ה View לבין ה ViewModel, ולפיכך אי אפשר לעבור ביניהם בקלות ע”י לחיצה על F7 כמו שאפשר בין ה View ל CodeBehind שלו. בנוסף, היה נחמד אם ויז’ואל סטודיו היה מציג את ה ViewModel “מתחת” ל View, כמו שהוא עושה ל CodeBehind.בנוסף לכל זה, את ה CodeBehind עצמו...
תגיות: , , , ,
3 תגובות

טיפ WPF – איך לגרום ל ToggleButtons להתנהג כמו קבוצה? איך לממש את זה ב MVVM ?

יום רביעי, אפריל 4, 2012

לקוח שאל אותי לאחרונה איך אפשר להשתמש ב Toggle Button כך שרק אחד יהיה בחור בכל רגע נתון, ושבמידה ולוחצים על אחר אז הכפתור הקודם לא יהיה בחור יותר, זה בערך המצב אליו הוא רצה להגיע:רק שבמימוש הנאיבי הראשוני שום דבר לא מונע מהכפתורים להיות לחוצים כמה ביחד: <UniformGrid Rows="6" Columns="2" HorizontalAlignment="Left" > <UniformGrid.Resources> <Style TargetType="ToggleButton"> <Setter Property="Margin" Value="2" /> <Setter Property="Padding" Value="10,5" /> ...
תגיות: , , , ,
3 תגובות