كيف يمكنني ربط خصائص متعددة في عنصر تخطيط Android

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

  •  12-12-2019
  •  | 
  •  

سؤال

أنا أستخدم MvvmCross لربط بيانات ViewModel الخاصة بي بتخطيط عرض Android.

من مثال SimpleBinding أستطيع أن أرى أنه لربط قيمة بخاصية أقوم بذلك:

  <EditText
    android:hint="Subtotal"
    android:gravity="left"
    android:inputType="numberDecimal"
    android:maxLines="1"
    android:numeric="decimal"        
    local:MvxBind="{'Text':{'Path':'SubTotal','Converter':'Float'}}"
  />

لذلك يرتبط النص بخاصية SubTotal الخاصة بـ ViewModel.لكن كيف أربط بأكثر من خاصية؟في حالتي أريد ربط خاصية ViewModel تسمى HigherLower بسمة TextColor الخاصة بعنصر التخطيط.لا أستطيع إضافة MvxBind آخر ولا أستطيع تعيين MvxBind إلى مصفوفة.

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

المحلول

تنسيق JSON المستخدم في تعبير الربط هو قاموس مسمى MvxJsonBindingDescriptionس

public class MvxJsonBindingDescription
{
    public string Path { get; set; }
    public string Converter { get; set; }
    public string ConverterParameter { get; set; }
    public string FallbackValue { get; set; }
    public MvxBindingMode Mode { get; set; }
}

يستخدم هذا مع:

  • اسم مفتاح القاموس هو الخاصية الهدف (عرض) للربط.
  • الترابط Path الخاصية هي خاصية المصدر (DataContext) للربط - if Path لم يتم تحديده، فإن DataContext بأكمله هو مصدر الربط.

بالنسبة لمستوى النشاط/العرض axml، فإن DataContext هو ViewModel - ولكن بالنسبة إلى axml للعرض الفرعي، سيكون DataContext عادةً كائنًا فرعيًا لـ ViewModel - على سبيل المثال.داخل ListView قد يكون DataContext عنصرًا داخل قائمة أو ObservableCollection مملوكة لـ ViewModel.


لتحديد روابط متعددة يمكنك استخدام JSON مثل:

 {
      'TargetProperty1':{'Path':'SourceProperty1'},
      'TargetProperty2':{'Path':'SourceProperty2'}
 }

بالنسبة لمثالك الخاص قد يكون هذا:

local:MvxBind="
       {
          'Text':{'Path':'SubTotal','Converter':'Float'}, 
          'TextColor':{'Path':'HigherLower','Converter':'MyColorConverter'}
       }"

حيث يكون ViewModel الخاص بك مثل:

public class MyViewModel : IMvxViewModel
{
     public float SubTotal { get; set; }

     public bool HigherLower { get; set; }

     // more code here
}

والمحول الخاص بك هو شيء مثل:

public class MyColorConverter : MvxBaseColorConverter
{
    protected override MvxColor Convert(object value, object parameter, CultureInfo culture)
    {
        return ((bool)value) ? new MvxColor(255,0,0) : new MvxColor(0,255,0);
    }
}

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


أحد الأمثلة التي تعرض الارتباطات المتعددة في العمل هو الأكثر مبيعًا - راجع النقر والنص المنضم في عنصر القائمة https://github.com/slodge/MvvmCross/blob/master/Sample%20-%20BestSellers/BestSellers/BestSellers.Droid/Resources/Layout/ListItem_Category.axml

نصائح أخرى

المسار ': يجب أن تفعل "SignLoweryou" هذا:

giveacodicetagpre.

لاحظ:

giveacodicetagpre.

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