سؤال

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

if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                continue;

TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();

و لكنها

parent.itemContainerGenerator.Status = generatorstatus.notstarted

لجميع العناصر المنهارة. كيف يمكنني إنشاء حاويات لهم يدويًا (دون توسيعها)؟

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

المحلول

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

يمكن أن يؤدي نموذج العرض إلى زيادة وظيفة TreeViews دون القلق بشأن أنواع المشكلات التي تواجهها.

سيكون لنموذج العرض لتطبيقك بضع خصائص إضافية

IsSelected

IsExpanded

IsHighlighted

وكذلك الخاص بك

Data

بعد ذلك ، يمكنك ربط (باستخدام itemContainersTyle) The Isselected ، Ishighlyed و isexpanded إلى treeviewitem ، ثم حيث كان لديك مجموعة من هذه النماذج عرض ، يمكنك إجراء البحث على نموذج View وتعيين الخاصية فقط بالضوء. سيستجيب نموذج العرض بعد ذلك وبسبب الارتباط بالنمط ، فإنه يسلط الضوء على TreeViewItem إذا أردت. يمكن أن تفعل أيضا أشياء غير تقليدية مثل توسيع جميع العقد أعلاه. منظر الشجرة يستجيب لهذا.

يعطي نموذج العرض عند دمجه مع TreeView مرونة أكبر بكثير ويوقف تمارين تزحف الأشجار البصرية (والتي هي اختراق ، وتشعر بالقلق)

هنا مقال جيد عن ViewModel و TreeView...

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