מדריך Windows Phone – שימוש ב Data Binding
מה זה Data Binding?
Data Binding היא טכניקה שמאפשרת לסנכרן בין שתי תכונות של אובייקטים שונים.
לרוב משתמשים בטכניקה זו בשביל לסנכרן בין אובייקט המכיל מידע (Data) לאובייקט המציג את המידע למסך (UI). לדוגמא התכונה Name של אובייקט מסוג Person יכולה להיות מסונכרנת לתכונה Text של אובייקט TextBox. הסנכרון יכול להיות דו-כיווני הוא חד-כיווני. לפעמים נעשה גם סנכרון בין שני פקדים כמו בדוגמא הבאה.
בדוגמא הבאה ניתן לראות שימוש פשוט ב Data Binding. בדוגמא זו יש לנו פקד CheckBox וכפתור ונרצה שהכפתור יהיה פעיל רק אם הCheckBox מסומן. כלומר נרצה שהתכונה IsChecked של הCheckBox תהיה מסונכרנת לתכונה IsEnabled של הכפתור. הקטעים החשובים לצורך ה Data Binding מודגשים:
<phone:PhoneApplicationPage
x:Class="PhoneDemo.MainPage"
>="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
>:x="http://schemas.microsoft.com/winfx/2006/xaml"
>:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
>:d="http://schemas.microsoft.com/expression/blend/2008"
>:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignWidth="480"
d:DesignHeight="800"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
Orientation="Portrait"
SupportedOrientations="Portrait">
<StackPanel>
<TextBlock
Text="Disclaimer: abcdefghijklmnopqrstuvwxyz" />
<CheckBox
x:Name="checkBoxAgree"
Content="I Agree"
IsChecked="False" />
<StackPanel
Orientation="Horizontal">
<Button
Content="Prev" />
<Button
Content="Next"
IsEnabled="{Binding ElementName=checkBoxAgree, Path=IsChecked}" />
</StackPanel>
</StackPanel>
</phone:PhoneApplicationPage>
ע"י הרצה של תוכנית זו ניתן לראות שסימון ה CheckBox משנה את הכפתור לפעיל ולהפך.
כמובן שיכולנו לעשות את הדוגמא הזאת גם ללא שימוש ב Data Binding, אלא ע"י טיפול באירוע Click של ה CheckBox וכתיבת קוד ב #C. היתרון ב Data Binding הוא שנחסך מאתנו לכתוב הרבה קוד שאחראי על סנכרון שכזה.
עקרונות Data Binding
Binding הוא הדבק שמחבר בין אובייקט מקור ואובייקט יעד. ולכן, בתהליך Binding יש ארבעה דברים שחייבים להגדיר:
- אובייקט היעד – זהו האובייקט שנרצה לשנות תכונה שלו. אובייקט זה חייב לרשת ישירות או בעקיפין מ DependencyObject. כל הפקדים בSilverlight הם כאלו. בדוגמא הקודמת האובייקט יעד היה ה Button.
- תכונת היעד – זוהי התכונה שנרצה לשנות. תכונה זו חייבת להיות Dependency Property. למזלנו, בSilverlight רוב התכונות הן כאלו, לכן לרוב זוהי אינה מגבלה. בדוגמא הקודמת, תכונת היעד הייתה IsEnabled.
- אובייקט המקור – זהו האובייקט שאליו היעד מתחבר. אין מגבלות על סוג האובייקט. בדוגמא הקודמת האובייקט מקור היה ה CheckBox.
- תכונת המקור – זוהי התכונה שממנה נרצה לקחת את הערך ולהציבו בתכונת היעד. תכונה זו יכולה להיות גם תכונה רגילה (כלומר לא Dependency Property). בדוגמא הקודמת תכונת המקור הייתה IsChecked. נעיר כי ניתן בתכונת המקור לרשום ביטויים מורכבים המכילים גם תתי תכונות (תכונה של תכונה).
בנוסף להגדרות הללו, ניתן להגדיר אפשרויות נוספות שישפיעו על תהליך ה Binding, לדוגמא כיוון זרימת המידע המידע.
מה נלמד בפרקים הבאים:
- שליטה בכיוון זרימת המידע
- שליטה במועד ביצוע הסנכרון
- הגדרת מקורות
- שימוש ב IValueConverter
- שימוש ב INotifyPropertyChanged
- חיבור ל Collection
תגובות בפייסבוק