[Wpf] وف مف-فم: الحصول على العناصر المحددة من ليستكولكتيونفيو؟



Answers

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

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

Question

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

<ListBox Grid.Row="1" ItemsSource="{Binding Useragents}" SelectionMode="Multiple"/>

يحتوي مربع القائمة على سيليتيونمود = مولتيبل، بحيث يمكنك تحديد المزيد من العناصر في وقت واحد. الآن فيوموديل يحتاج إلى معرفة العناصر التي تم اختيارها.

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

إذا كيف يمكنني العثور على العناصر التي تم تحديدها في قائمة القوائم؟ أو خدعة لتحقيق هذا (ربما ربط شيء إلى منطقي "إسلكتد" في البنود بلدي؟ ولكن ماذا؟)؟

ربما شخص ما يستخدم هذا النمط أيضا يمكن أن يساعدني هنا؟




حل درو مارش يعمل بشكل جيد للغاية، وأنا أوصي به. ولدي حل آخر!

عرض نموذج فيوموديل هو عرض السلبي ، يمكنك أيضا استخدام نموذج العرض للوصول إلى بعض دتس من العرض التقديمي الخاص بك دون أن يقترن مع وف (يستخدم هذا النمط في ستوكترادر سبيل المثال من بريسم ).







بالنسبة لي أفضل إجابة هي لكسر قليلا من مبدأ مففم.

على التعليمات البرمجية وراء 1. إنستانسيات فيووموديل 2. إضافة معالج الحدث سيلكتيونشانجد 3. تكرار من خلال العناصر المحددة الخاصة بك وإضافة كل عنصر إلى قائمة فيودموديل

ViewModel viewModel = new ViewModel();

viewModel.SelectedModules = new ObservableCollection<string>();

foreach (var selectedModule in listBox1.SelectedItems)
{
    viewModel.SelectedModules.Add(selectedModule.ToString());
}



Links