كيف يمكنني ربط خصائص متعددة في عنصر تخطيط Android
-
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) للربط - ifPath
لم يتم تحديده، فإن 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.