هل من الممكن استخدام IMultiValueConverter للحصول على قائمة من البنود ؟

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

سؤال

لدي EmployeeList كما observableCollection الموظف الكائن.

الموظف كائن له الراتب.

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

ويمكن تحقيق ذلك عن طريق إنشاء الملكية متوسط والاستماع إلى جمع تغيرت ProperyChanged معالجات في القائمة.

ولكن أنا متأكد من أنه ينبغي أن يكون هناك بعض أفضل طريقة للقيام بذلك.(مثل استخدام AttachedProperties أو IValueConverter/IMultiValueConverter)

حول هذا, لدي الأسئلة التالية.

  1. هل من الممكن استخدام IMultiValueConverter قائمة/ObservableCollection من البنود ؟ المحول يجب أن يسمى عند عنصر يضاف إلى قائمة وكذلك عند خاصية معينة تغير ؟
هل كانت مفيدة؟

المحلول

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

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

كل ما عليك القيام به هو إنشاء خصائص للقراءة فقط ، وندعو PropertyChanged مع تلك الخاصية اسم عندما جمع التغييرات (التي يبدو تقومون به).

على سبيل المثال, هنا هو "متوسط" الملكية:

public Double Average   
{
    get { return mMyCollection.Average(); }
}

void mMyCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    PropertyChanged(this, new PropertyChangedEventArgs("Average"));
}

الخصائص المرفقة لا تعمل - يتم تحديد أحد الوالدين الملكية في عنصر الطفل.

ValueConverters العمل ، في نظرية (على الرغم من أنهم ربما يتعين على كل بند في القائمة ، فضلا عن مجموعة كاملة), ولكن كنت حقا لا تحويل أي شيء ، يتم توفير بيانات إضافية بناء على البيانات الموجودة.للقيام بذلك, سوف تحتاج إلى الوحل حولها مع جميع أنواع القوالب و في أي وقت كنت بحاجة إلى تغيير أي شيء, سوف تحتاج إلى تحشر معهم مرة أخرى.فإنه يحصل معقدة في عجلة من امرنا ، أي فائدة.

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