سؤال

أعلم أنه في ASP.NET يمكنني الحصول على عنصر من قائمة DropDownList باستخدام

DropDownList1.Items.FindByText

هل هناك طريقة مماثلة يمكنني استخدامها في WPF لـ ComboBox؟

هذا هو السيناريو.

لدي جدول يسمى RestrictionFormat يحتوي على عمود يسمى RestrictionType، النوع هو مفتاح خارجي لجدول يخزن هذه القيم.

في تطبيق المحرر الذي أكتبه، عندما يحدد المستخدم RestrictionFormat من ComboBox (يعمل هذا بشكل جيد)، أقوم بسحب التفاصيل للتحرير.أنا أستخدم ComboBox ثانيًا للتأكد من أن المستخدم يحدد فقط RestrictionType واحد عند التحرير.لدي بالفعل الخاصية الثانية المرتبطة بمربع التحرير والسرد من جدول RestrictionType، ولكنني بحاجة إلى تغيير الفهرس المحدد عليها لمطابقة القيمة المحددة في السجل.


هذا هو السيناريو.

لدي جدول يسمى RestrictionFormat يحتوي على عمود يسمى RestrictionType، النوع هو مفتاح خارجي لجدول يخزن هذه القيم.

في تطبيق المحرر الذي أكتبه، عندما يحدد المستخدم RestrictionFormat من ComboBox (يعمل هذا بشكل جيد)، أقوم بسحب التفاصيل للتحرير.أنا أستخدم ComboBox ثانيًا للتأكد من أن المستخدم يحدد فقط RestrictionType واحد عند التحرير.لدي بالفعل الخاصية الثانية المرتبطة بمربع التحرير والسرد من جدول RestrictionType، ولكنني بحاجة إلى تغيير الفهرس المحدد عليها لمطابقة القيمة المحددة في السجل.

هل لهذا معنى؟

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

المحلول

هل يمكنك استخدام ItemContainerGenerator؟

يحتوي ItemContainerGenerator على أسلوب ContainerFromItem الذي يأخذ معلمة كائن.إذا كان لديك مرجع للكائن الكامل الذي يحتوي عليه صندوق التحرير والسرد الخاص بك (أو طريقة لإعادة بنائه)، فيمكنك استخدام ما يلي:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

نصائح أخرى

في WPF يمكنك استخدام طريقة FindName.

XAML:

    <ComboBox Name="combo">
        <ComboBoxItem Name="item1" >1</ComboBoxItem>
        <ComboBoxItem Name="item2">2</ComboBoxItem>
        <ComboBoxItem Name="item3">3</ComboBoxItem>
    </ComboBox>

ملف الكود الخلفي

   item1.Content = "New content"; // Reference combo box item by name
   ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method

للعثور على العنصر حسب محتواه يمكنك استخدامه أتمتة واجهة المستخدم.

بدلاً من محاولة ربط SelectedIndex، لماذا لا تقوم فقط بربط SelectedItem في ComboBox بالقيمة الموجودة في السجل؟

بمعنى آخر، قم بتعيين DataContext الخاص بـ ComboBox (أو أصله) إلى "السجل" المحدد وربط العنصر المحدد في ComboBox بخاصية مكشوفة في "السجل".

قد يكون من المفيد تقديم بعض مقتطفات التعليمات البرمجية، أو تفاصيل إضافية حتى تكون الاستجابات أكثر تحديدًا وتشير إلى المتغيرات والأنواع التي تستخدمها في كل من السجل المصدر وComboBox الذي قمت بملئه.

يمكنك استرداد عناصر combobox بطريقتين:

حسب العنصر:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);

حسب الفهرس:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

هل يمكنك إعطاء بعض السياق حول ما تحاول القيام به بالضبط؟

ما هي الكائنات التي تضعها في Combobox الخاص بك، وبأي طريقة؟(هل تقوم بتعيين أو ربط خاصية SEDSSORCE؟) لماذا تحتاج إلى البحث عن عنصر عن طريق "النص"؟الاستخدام الأكثر شيوعًا في WPF هو ربط خاصية SelectedItem بشيء آخر حتى تتمكن من استرداد/تعيين الإدخال المحدد باستخدام التمثيل الخاص بك.هل هناك متطلبات محددة تحتاج إلى العثور على عنصر معين في القائمة من أجلها؟

في أسوأ الحالات، يمكنك إجراء البحث على المجموعة التي تربط بها ComboBox باستخدام Linq To Objects.

لا تخطئ بين ComboBoxItem (أي العنصر الذي تم إنشاؤه لك خلف الكواليس بواسطة WPF عند ربط ItemsSource) مع SelectedItem، وهو الكائن الفعلي في المجموعة التي ترتبط بها.عادةً ما يكون هذا هو مصدر معظم المشكلات المتعلقة بـ WPF عندما لا تكون معتادًا عليه.هناك حالات قليلة ثمينة عندما تحتاج إلى العثور على ComboBoxItem الفعلي.

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