Date post: | 01-Jan-2016 |
Category: |
Documents |
Upload: | myra-buchanan |
View: | 49 times |
Download: | 1 times |
Data Binding1. Introduction
2. Model
3. “Hello world” with Binding
4. Using the DataContext
5. INotifyPropertyChanged Interface
6. UpdateSourceTrigger property
7. ObservableCollection<T>
Introduction.1 - ) ב – ) הקיים מידע בין כורכים קשר מייצרים שבו תהליך .BLבמאקרו המשתמש לממשק
.2) ( ) פקדים - ) ויזואליים לרכיבים שדות מידע פירטי בין מקשרים שבה טכניקה במיקרו
.3 : רכיבים' – שני בין גשר כלס - Binding Sourceבת .Binding Targetו
" ))WPFב-4. נתונים – " - Data Bindingכריכת ה שבין בקשר מרכזית טכניקה BLהיא.UIל-
.5 - " ב" לשקף שתפקידם אירועים גם מגדירה נתונים במידע UIכריכת השינויים את - ב שבוצעו שינויים - UIולהעביר ה - BLלשכבת .DALוה
- WPFב- 6. ב שהורגלנו למה הורחבה מאוד אפשרית Windows Formsהטכניקה והיא. שונים מידע ולמקורות מאפיינים של רחב למגוון
.7- מ - Windows Formsבמעבר כי , WPFל ולהפחיד לבלבל קצת עלולה נתונים כריכת. לחלוטין שונה בשיטה הממומשים דומים ברעיונות מדובר
Model. רבים מידע ומקורות שונים מאפיינים מעורבים להיות יכולים נתונים בכריכת
. המידע למקור קשר וללא למאפיין קשר ללא אחיד מודל מציגה נתונים כריכת
: מרכיבים ארבעה יהיו תמיד הזה במודל
: מרכיבים ארבעה יהיו תמיד הזה במודל
מטרה )1. (binding target objectאובייקט
מטרה )2. (target propertyמאפיין
(binding sourceמקור )3.
ערך/ )4. (.Valueתוכן
UI Object
Property
UI Dependency Object
DependencyProperty
Binding Target
Binding Source
Binding Object
Modelלדוגמה:
בין לכרוך נרצה שם TextBoxאם שנקראת תכונה של תוכן :Person.Nameלבין.1 - ה הוא המטרה .TextBoxאובייקט
הוא 2. המטרה .TextBox.Textמאפיין
המחלקה 3. הוא .Personהמקור
.4 - ב הקיים הערך הוא .Nameוהתוכן
UI Object
Property
UI Dependency Object
DependencyProperty
Binding Target
Binding Source
Binding Object
“Hello world” with Binding
במחלקה – } { 1. ושימוש המסולסלים בסוגריים מתחיל הנתונים כריכת תהליךBinding.
המחלקה 2. . Bindingבאמצעות הנתונים לכריכת הדרושים הפרמטרים את נגדיר
מטרה )3. באובייקט מוגדרת המקור( binding target objectהמחלקה את ומגדירה(binding source )באמצעותElementName( המטרה מאפיין targetואת
property )באמצעותPath.
מטרה )4. במאפיין מוצבים (target propertyהסוגריים
<StackPanel Margin="10" > <StackPanel Orientation="Horizontal" > <TextBlock Text="Source: " FontSize="20"></TextBlock> <TextBox Name="txtValue" FontSize="20" Width="300"/> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="Target: " FontSize="20"></TextBlock> <TextBlock Text="{Binding ElementName=txtValue, Path=Text}" FontSize="20" /> </StackPanel></StackPanel>
: קוד דוגמתHelloWorldDataBinding
Using the DataContext- DataContextהמאפיין 1. ב וחשוב מרכזי מאפיין .Data Bindingהוא
.2DataContext - ה את המכיל המאפיין - Data Sourceהוא ה מחלקת עבורBinding.
.3 - ב התועלת ?Data Sourceללא Bindingומה
.4 - ה שאת .DataContextמקובל החלון ברמת מאתחלים
הבסיס 5. במחלקת מוגדר נגזרים , FrameworkElementהמאפיין שממנה מחלקה. הפקדים רוב
להגדרת DataContextהגדרת 6. ביותר הנפוצה השיטה .Data Bindingהיא
.
Using the DataContext: קוד דוגמת
Code Behind public partial class MainWindow : Window{ public MainWindow() { InitializeComponent(); Person person = new Person { FirstName = "Elimelch", LastName = "Zorkin", Age = 88 }; this.DataContext = person; }}
class Person{ public string LastName { get; set; } public string FirstName { get; set; } public int Age { get; set; }}
המקור הגדרת(binding source)
/ ערך התוכן הגדרת(Value)
המקור הגדרתDataBindingל-
: קוד DataContextSampleדוגמת
Using the DataContext
XAML
כמו ) עריכה בשדה - TextBoxבשימוש , Bindingה( - אולם כיווני דו הוא:)... בה ) וקוץ עליה הפוקוס את איבד שהפקד לאחר רק מתבצע העדכון
<StackPanel> <TextBlock Text="{Binding LastName}"></TextBlock> <TextBlock Text="{Binding FirstName}"></TextBlock> <TextBlock Text="{Binding Age}"></TextBlock></StackPanel> המטרה אובייקט הגדרת
(binding target object)מטרה מאפיין הגדרת
(target property)
: קוד דוגמתDataContextTwoDirectionSample
<StackPanel> <TextBox Text="{Binding LastName}"></TextBox> <TextBox Text="{Binding FirstName}"></TextBox> <TextBox Text="{Binding Age}"></TextBox> <Button Name="btn" Content="Click Me" Click="btn_Click"></Button></StackPanel>
INotifyPropertyChanged Interface, INotifyPropertyChangedהממשק 1. ותורם שימושי חשוב ממשק הוא
של .Data Bindingלפונקציונאליות
.2 : השמות במרחב using System.ComponentModelמוגדר
.3- ל הקשור בפקד שינוי שמתרחש אימת כל יופעל אשר אירוע Data Bindingמגדיר(Data Bound Control).
: קוד INotifyPropertyChangedSampleדוגמת
class Person : INotifyPropertyChanged{ private string m_LastName; private string m_FirstName; private int m_Age; . . .}
הבא בעמוד המשך
INotifyPropertyChanged Interfaceclass Person : INotifyPropertyChanged{ . . . public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } . . .}
הבא בעמוד המשך
מימוש הממשק
אירוע הפעלת
INotifyPropertyChanged Interfaceclass Person : INotifyPropertyChangedהמשך:
{ private string m_LastName; private string m_FirstName; private int m_Age; public string LastName { get { return m_LastName; } set { if (m_LastName != value) { m_LastName = value; OnPropertyChanged("LastName"); } } } . . .}
הבא בעמוד המשך
שינויים על דיווחבמידע
INotifyPropertyChanged Interfacepublic partial class MainWindow : Windowהמשך:
{ private Person mPerson; public MainWindow() { mPerson = new Person (); mPerson.PropertyChanged += _person_PropertyChanged; this.DataContext = mPerson; }
void _person_PropertyChanged(object sender, PropertyChangedEventArgs e) { // Save to Database txtFullName.Text = mPerson.LastName + " " + mPerson.FirstName + " is " + mPerson.Age + " years old"; } . . .}
טיפול באירוע
הרשמה לאירוע
: קוד INotifyPropertyChangedSampleדוגמת
INotifyPropertyChanged Interfaceבפקד – שינוי ראשון :TextBoxשלב
INotifyPropertyChanged Interface: פוקוס – איבד שהפקד אחרי מיד שני שלב
: - עדכונים שלישי שלב
INotifyPropertyChanged Interface: הפקדים שלושת עדכון אחרי התהליך סיום עם
UpdateSourceTrigger property.1- ל המקושר במידע שינויים לעדכן כיצד למדנו הקודמות .DataContextבדוגמאות
בפקדי – ) 2. רק הפוקוס את מאבד שהפקד לאחר רק מתבצע העדכון (.Textהבעיה
.UpdateSourceTrigger.Bindingהפתרון – 3.
:UpdateSourceTrigger.Bindingל- 4. אפשריים ערכים שלושה
.1Explicit - ב– בצורה DataContextהערכים כן לעשות מהם שנבקש עד יתעדכנו לאטראנזקציה, בהם למקרים או נתונים הרבה מקלידים בהם למקרים מתאים מפורשת
. שלמה להיות חייבת
.2LostFocus – - , ה המחדל .DataContextברירת הפקד של פוקוס באיבוד מתעדכן
.3PropertyChanged – . הערכים שינוי עם מיידית
UpdateSourceTrigger property<StackPanel> <TextBox Text="{Binding LastName, UpdateSourceTrigger=PropertyChanged}" TextChanged="TextBox_TextChanged"></TextBox> <TextBox Text="{Binding FirstName, UpdateSourceTrigger=PropertyChanged}" TextChanged="TextBox_TextChanged"></TextBox> <TextBox Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}" TextChanged="TextBox_TextChanged"></TextBox> <Button Name="btn" Content="Click Me" Click="btn_Click"></Button></StackPanel>
הרשמה לאירוע
: קוד UpdateSourceTriggerSampleדוגמת
ObservableCollection<T>מגדירים 1. ?Data Bindingאיך נתונים לאוסף
הגנרית 2. האוסף במחלקת המוגדרת< ObservableCollection<Tמשתמשים : השמות .System.Collections.ObjectModelבמרחב
.3ObservableCollection<T >הממשק את .INotifyCollectionChangedמממש
.4 - ב מעוניינים שלא - Data Bindingהיכן ב להשתמש שיקולי Listעדיף בשלביצועים.
ObservableCollection<T>
: קוד דוגמתpublic partial class MainWindow : Window { private ObservableCollection<User> users_list = new ObservableCollection<User>(); public MainWindow() { InitializeComponent(); users_list.CollectionChanged += users_list_CollectionChanged; users_list.Add(new User() { Name = "Elimelech", Password="123456" }); users_list.Add(new User() { Name = "Shoshana", Password = "123456" }); this.DataContext = this; } void users_list_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { this.Title = users_list.Count().ToString(); } public ObservableCollection<User> Users { get { return users_list; } set { users_list = value; } } . . .}
: קוד ObservableCollectionSampleדוגמת