WPF Isedital = True Combobox مليئة بالكائنات يعرض Tostring () كعنصر محدد

StackOverflow https://stackoverflow.com/questions/1844156

سؤال

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

عند تحديد عنصر، يتم عرضه كنص، فهو لا يستخدم DataTemplate، فسيكون فقط استدعاء ToString () في العنصر المحدد.

أحصل على قائمة العناصر الموجودة في التحرير والسرد المنسدلة التي يتم تنسيقها باستخدام قالب العنصر الخاص بي، عندما أحدد أحد أحصل على اسم الكائن IE namnamespace.myobjectname.

بعض الحلول كانت

  • استخدم Valuepath لربط خاصية على الكائن، ولكن إذا كنت بحاجة إلى أن تكون شاشتك أكثر من واحد من هؤلاء، سيئ الحظ.
  • تنفيذ طريقة ToString () على جسمك

هل هناك طريقة أخرى حولها؟

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

المحلول

يمكنك القيام بذلك بالكامل داخل XAML

<ComboBox IsTextSearchEnabled="True" IsEditable="True"
        ItemsSource="{Binding MyObjectCollection}"
        TextSearch.TextPath="MyObjectName">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MyObjectName}" />
        </DataTemplate>
     </ComboBox.ItemTemplate>
</ComboBox>

الاتجاه الصعودي هو أنه يمكنك تحديد وتغيير هذا ولكنك تريد في XAML دون أي رمز خلف. يمكنك ربط OctemsSource بمجموعة الكائنات الخاصة بك، ثم قمت بتعيين المسار الذي يقوم بتبليغ بحثك إلى TextSearch.TextPath. بعد ذلك، داخل عناصر مخصصة لك يمكنك ربط TextBlock بشيء آخر خارج طريقة Tostring الكائن.

نصائح أخرى

يمكنك استخدام IvalueConverter. لتحويل "الكائن" إلى قيمة السلسلة والظهر. راجع رمز المثال في رابط IvalueConverter للحصول على التفاصيل.

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