2015-01-07 3 views
1

Когда я применить заглушки преобразователь к TextView он ломает привязки как-тоMvxValueConverter ломает привязки

Вот TextView с окантовкой

<EditText 
    android:id="@+id/etAutoNumber" 
    android:layout_width="fill_parent" 
    android:textSize="34sp" 
    android:capitalize="characters" 
    android:hint="50 АА 101101" 
    android:layout_marginLeft="16dp" 
    android:layout_marginRight="16dp" 
    android:layout_marginTop="16dp" 
    android:layout_height="wrap_content" 
    android:textColor="@color/primary_text" 
    android:maxLength="12" 
    local:MvxBind="Text DocumentFormatter(Number)" 
    android:imeOptions="actionGo" 
    android:inputType="textPostalAddress" /> 

Вот конвертер применением: local:MvxBind="Text DocumentFormatter(Number)"

Вот конвертер, это в принципе сделать ничего, оно расположено в .Droid Project

public class DocumentFormatterValueConverter : MvxValueConverter 
{ 
    public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     Mvx.Trace("convert for {0}", value); 
     return base.Convert(value, targetType, parameter, culture); 
    } 
} 

Если я переопределяю ConvertBack, я получаю новую строку из TextView to Converter, но привязка все еще отсутствует.

Вот ViewModel недвижимость:

public string Number 
     { 
      get { return _number; } 
      set 
      { 
       _number = value; 
       RaisePropertyChanged(() => Number); 
       // some additional work 
       // ... 
      } 
     } 

Если я заменить связывание с местным: MvxBind = «Текст Количество» он отлично работает, если я использую конвертер - он работает один раз: я установить Number=String.Empty в Init и он вызывает конвертер раз

Вот пример вывода журнала из Init в GoCommand

mvx:Diagnostic: 5,24 TrackerService.LogEvent Init.ViewAuto 
01-07 16:18:48.844 I/mono-stdout(2442): mvx:Diagnostic: 5,24 TrackerService.LogEvent Init.ViewAuto 
[0:] mvx:Diagnostic: 5,24 TrackerService.LogEvent Init.ViewAuto 
[0:] 
MvxBind:Error: 5,40 View type not found - android.support.v7.widget.Toolbar 
01-07 16:18:49.025 I/mono-stdout(2442): MvxBind:Error: 5,40 View type not found - android.support.v7.widget.Toolbar 
[0:] MvxBind:Error: 5,40 View type not found - android.support.v7.widget.Toolbar 
01-07 16:18:49.121 D/Mono (2442): Assembly Ref addref Cirrious.MvvmCross.Binding[0xac371880] -> System.Threading[0xac3fe340]: 7 
01-07 16:18:49.146 D/Mono (2442): Assembly Ref addref Cirrious.CrossCore[0xac3718e0] -> System.ObjectModel[0x9f6a1760]: 5 
01-07 16:18:49.153 D/Mono (2442): Assembly Ref addref Cirrious.MvvmCross[0xac371b20] -> System.Threading[0xac3fe340]: 8 
[0:] 
mvx:Diagnostic: 5,56 convert for 
[0:] mvx:Diagnostic: 5,56 convert for 
01-07 16:18:49.169 I/mono-stdout(2442): mvx:Diagnostic: 5,56 convert for 
Resolved pending breakpoint at 'c:\Users\...\EnterFirstAutoViewModel.cs:23,1' to void EnterFirstAutoViewModel.<DoGoCommand>d__0.MoveNext() [0x0001e]. 
01-07 16:19:03.837 D/Mono (2442): Assembly Ref addref Fines.Core[0x9f63b1c0] -> System.Diagnostics.Debug[0x9f63bc40]: 2 
01-07 16:19:03.837 D/Mono (2442): Assembly Ref addref System.Diagnostics.Debug[0x9f63bc40] -> mscorlib[0xac3714c0]: 30 
01-07 16:19:14.032 D/Mono (2442): Assembly Ref addref Chance.MvvmCross.Plugins.UserInteraction.Droid[0xac3715e0] -> Cirrious.CrossCore.Droid[0xac371820]: 6 

мне удалось получить гораздо более подробный вывод на 4.0.4 устройства

mvx:Diagnostic:211,37 TrackerService.LogEvent Init.ViewAuto 
[0:] mvx:Diagnostic:211,37 TrackerService.LogEvent Init.ViewAuto 
01-07 16:39:24.929 I/mono-stdout(3848): mvx:Diagnostic:211,37 TrackerService.LogEvent Init.ViewAuto 
01-07 16:39:24.947 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.947 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.947 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.947 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.948 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.948 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.948 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.949 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.949 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:24.949 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
[0:] 
mvx:Diagnostic:211,91 convert for: . 
[0:] mvx:Diagnostic:211,91 convert for: . 
01-07 16:39:25.469 I/mono-stdout(3848): mvx:Diagnostic:211,91 convert for: . 
01-07 16:39:25.474 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:25.474 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:25.474 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:25.475 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:25.475 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:25.489 D/ActivityThread(3848): ACT-AM_ON_RESUME_CALLED ActivityRecord{418fb640 [email protected] {...app/...droid.views.EnterFirstAutoView}} 
01-07 16:39:25.492 D/ActivityThread(3848): ACT-LAUNCH_ACTIVITY handled : 0/ActivityRecord{418fb640 [email protected] {...app/...droid.views.EnterFirstAutoView}} 
01-07 16:39:25.494 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:25.525 D/OpenGLRenderer(3848): Flushing caches (mode 0) 
01-07 16:39:25.566 V/TextView(3848): onSpanRemoved s=0 e=0 [email protected]: 
01-07 16:39:25.566 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:25.594 W/IInputConnectionWrapper(3848): showStatusIcon on inactive InputConnection 
01-07 16:39:25.608 D/ActivityThread(3848): ACT-DESTROY_ACTIVITY handled : 1/[email protected] 
01-07 16:39:25.612 D/ActivityThread(3848): ACT-DESTROY_ACTIVITY handled : 1/[email protected] 
01-07 16:39:28.261 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:28.344 V/TextView(3848): onSpanRemoved s=0 e=0 [email protected]: 
01-07 16:39:28.467 V/TextView(3848): onSpanRemoved s=0 e=0 [email protected]: 
01-07 16:39:28.467 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:29.844 V/TextView(3848): onSpanAdded s=0 e=0 [email protected]: 
01-07 16:39:29.844 V/TextView(3848): beforeTextChanged start=0 before=0 after=1: 
01-07 16:39:29.844 V/TextView(3848): onTextChanged start=0 before=0 after=1: 1 
01-07 16:39:29.844 V/TextView(3848): afterTextChanged: 1 
01-07 16:39:29.845 V/TextView(3848): onSpanAdded s=0 e=1 [email protected]: 1 
01-07 16:39:30.089 V/TextView(3848): onSpanChanged s=0 e=0 st=1 en=1 [email protected]: 1 
01-07 16:39:30.090 V/TextView(3848): beforeTextChanged start=1 before=0 after=1: 1 
01-07 16:39:30.090 V/TextView(3848): onTextChanged start=1 before=0 after=1: 12 
01-07 16:39:30.090 V/TextView(3848): afterTextChanged: 12 
01-07 16:39:30.091 V/TextView(3848): onSpanChanged s=0 e=1 st=1 en=2 [email protected]: 12 
01-07 16:39:30.295 V/TextView(3848): onSpanChanged s=1 e=1 st=2 en=2 [email protected]: 12 
01-07 16:39:30.295 V/TextView(3848): beforeTextChanged start=2 before=0 after=1: 12 
01-07 16:39:30.296 V/TextView(3848): onTextChanged start=2 before=0 after=1: 123 
01-07 16:39:30.296 V/TextView(3848): afterTextChanged: 123 
01-07 16:39:30.297 V/TextView(3848): onSpanChanged s=1 e=2 st=2 en=3 [email protected]: 123 
01-07 16:39:30.926 V/TextView(3848): onSpanChanged s=2 e=2 st=3 en=3 [email protected]: 123 
01-07 16:39:30.926 V/TextView(3848): beforeTextChanged start=3 before=0 after=1: 123 
01-07 16:39:30.926 V/TextView(3848): onTextChanged start=3 before=0 after=1: 1234 
01-07 16:39:30.927 V/TextView(3848): afterTextChanged: 1234 
01-07 16:39:30.927 V/TextView(3848): onSpanChanged s=2 e=3 st=3 en=4 [email protected]: 1234 
01-07 16:39:31.141 V/TextView(3848): onSpanChanged s=3 e=3 st=4 en=4 [email protected]: 1234 
01-07 16:39:31.141 V/TextView(3848): beforeTextChanged start=4 before=0 after=1: 1234 
01-07 16:39:31.141 V/TextView(3848): onTextChanged start=4 before=0 after=1: 12345 
01-07 16:39:31.141 V/TextView(3848): afterTextChanged: 12345 
01-07 16:39:31.142 V/TextView(3848): onSpanChanged s=3 e=4 st=4 en=5 [email protected]: 12345 
01-07 16:40:16.717 V/BaseInputConnection(3848): finishComposingText 
01-07 16:40:16.725 V/TextView(3848): onSpanRemoved s=0 e=5 [email protected]: 12345 
01-07 16:40:16.725 V/TextView(3848): onSpanAdded s=0 e=5 [email protected]: 12345 

Я понятия не имею, что может вызвать такие ошибки, может ли кто-нибудь мне помочь?

+0

Есть ли в журнале приложения журналы, указывающие на ошибку? Пожалуйста, добавьте журнал в проблему, чтобы мы могли посмотреть на него. Также я бы рекомендовал использовать типы для вашего конвертера, чтобы убедиться, что вы установили правильный тип в «Bind Text». Пример: DocumentFormatterValueConverter: MvxValueConverter Martijn00

+0

@Martijn Я добавил журнал с выхода, но там ничего необычного нет. Да, я знаю об общем конвертере, я обычно использую только их, но здесь я использую простой конвертер для упрощения этого примера. – xakz

+1

Вы можете исправить ошибку на панель инструментов, добавив в свой андроид setup.cs: защищено переопределение IList AndroidViewAssemblies \t \t { \t \t \t получить \t \t \t { \t \t \t \t вара сборки = base.AndroidViewAssemblies; \t \t \t \t assemblylies.Add (типof (Android.Support.V7.Widget.Toolbar) .Сборка); \t \t \t \t assemblylies.Add (типof (Android.Support.V4.Widget.DrawerLayout).Ассамблеи); \t \t \t \t возвратные сборки; \t \t \t} \t \t} (Это просто Sidenote) – Martijn00

ответ

2

Проблема заключалась в базе виртуальных методов MvxValueConverter

public abstract class MvxValueConverter 
    : IMvxValueConverter 
{ 
    public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return MvxBindingConstant.UnsetValue; 
    } 

    public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return MvxBindingConstant.UnsetValue; 
    } 
} 

, как вы можете видеть, что это возвращает MvxBindingConstant.UnsetValue; поэтому, когда вам нужно только Преобразовать реализации, не забудьте отменить ConvertBack а.

public class DocumentFormatterValueConverter : MvxValueConverter<string,string> 
{ 
    protected override string Convert(string value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //return base.Convert(value, targetType, parameter, culture); 
     return DocumentFormatter.FormatNumber(value); 
    } 

    protected override string ConvertBack(string value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //return base.ConvertBack(value, targetType, parameter, culture); 
     return value; 
    } 
} 
Смежные вопросы