سؤال

هل يمكن لأي شخص أن يوجهني إلى مورد جيد (أو يرميني بدليل) ليوضح لي كيفية إجراء DataBinding لعناصر التحكم (ComboBox، ListBox، وما إلى ذلك) في WPF؟أشعر بالخسارة بعض الشيء عندما يتم أخذ كل مميزات WinForms مني، وأنا لست ذكيًا جدًا في البداية...

هل كانت مفيدة؟

المحلول

أجد مقاطع الفيديو التعليمية في عميل ويندوز.نت رهيبة على حد سواء. تلفزيون دوت نت روكس وقد غطتها أيضًا منذ بعض الوقت.

نصائح أخرى

أفضل مورد وجدته لربط بيانات WPF هو مدونة بيا كوستا.ابدأ من المشاركة الأولى ثم تابع القراءة.إنه رائع.

في الكود الخلفي - قم بتعيين DataContext لمربع القائمة الخاص بك على قدم المساواة مع المجموعة التي ترتبط بها.

private void OnInit(object sender, EventArgs e)
{
  //myDataSet is some IEnumerable 

  // myListBox is a ListBox control.
  // Set the DataContext of the ListBox to myDataSet
  myListBox.DataContext = myDataSet;
}

في XAML، يمكن لـ Listbox الإعلان عن الخصائص التي يرتبط بها باستخدام بناء الجملة "Binding".

<ListBox Name="myListBox" Height="200"
  ItemsSource="{Binding Path=BookTable}"
  ItemTemplate  ="{StaticResource BookItemTemplate}"/>

وبعض الروابط الأخرى، فقط في حالة عدم كفاية ما سبق:

مؤسسة العرض التقديمي لـ Windows - موضوعات إرشادية حول ربط البيانات
- حوالي 30 مقالة "كيفية" من MSDN.
"تصف المواضيع الموجودة في هذا القسم كيفية استخدام ربط البيانات لربط العناصر بالبيانات من مجموعة متنوعة من مصادر البيانات في شكل كائنات وقت تشغيل اللغة العامة (CLR) وXML."

التحرك نحو ربط بيانات WPF خطوة بخطوة
- بواسطة WPF المعلم جوش سميث
"تشرح هذه المقالة الأساسيات المطلقة لربط بيانات WPF.ويوضح أربع طرق مختلفة لكيفية أداء نفس المهمة البسيطة.يقترب كل تكرار من التنفيذ الأكثر إحكاما لـ XAML فقط.هذه المقالة مخصصة للأشخاص الذين ليس لديهم خبرة في ربط بيانات WPF."

إليك مورد جيد آخر من MSDN: نظرة عامة على ربط البيانات.

هناك ثلاثة أشياء عليك القيام بها:

  1. قم بربط ItemsSource في ComboBox بقائمة الخيارات.
  2. قم بربط العنصر المحدد بالخاصية التي تحتوي على التحديد.
  3. قم بتعيين ComboBox.ItemTemplate إلى DataTemplate لـ ComboBoxItem.

لذلك، على سبيل المثال، إذا كان كائن سياق البيانات الخاص بك هو شخص لديه عناوين بريد إلكتروني، وتريد اختيار عنوانه الأساسي، فقد يكون لديك فئات بهذه التوقيعات:

public class EmailAddress
{
    public string AddressAsString { get; set; }
}

public class Person
{
    public IEnumerable<EmailAddress> EmailAddresses { get; }
    public EmailAddress MainEmailAddress { get; set; }
}

ثم يمكنك إنشاء مربع التحرير والسرد مثل هذا:

<ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <ComboBoxItem Content="{Binding AddressAsString}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

أنت الآن بحاجة إلى تنفيذ INotifyPropertyChanged في كل من الشخص وEmailAddress.بالنسبة لمجموعة EmailAddresses، يمكنك دعمها باستخدام ObjservableCollection.

أو كبديل يمكنك استخدامه تحديث عناصر التحكم .NET.هذا مشروع مفتوح المصدر يحل محل ربط البيانات ولا يتطلب INotifyPropertyChanged.يمكنك استخدام أي مجموعة منطقية لدعم خاصية EmailAddresses.يعمل XAML بنفس الطريقة المذكورة أعلاه، باستثناء أنك تقوم باستيراد مساحة الاسم UpdateControls.XAML واستبدال {Binding ...} بـ {u:Update ...}.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top