2017-04-23 5 views
0

Ich habe die folgende Ansicht, wo der Inhalt des AppCompatEditText an die Eigenschaft "ArticleName" des ViewModel binden sollte. Dies funktioniert in Debug-Builds, aber nicht in Release-Builds. Was ist der Grund für diesen Effekt? Es ist ein ziemlich einfaches ViewModel eines Dialogs.Datenbindung mit AppCompatEditText funktioniert nicht in Release Build

<RelativeLayout xmlns:local="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:minWidth="25px" 
    android:minHeight="25px"> 
    <TextView 
     android:id="@+id/txtHeadline" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/activity_vertical_margin" 
     android:textAppearance="@android:style/TextAppearance.DialogWindowTitle" 
     android:text="New item" /> 
    <AppCompatEditText 
     android:id="@+id/editArticleName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/txtHeadline" 
     local:MvxBind="Text ArticleName" /> 
    <Button 
     android:id="@+id/btnAdd" 
     android:text="Add" 
     android:layout_below="@id/editArticleName" 
     android:layout_alignParentRight="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@color/colorPrimary" 
     local:MvxBind="Click AddItem;Enabled CanAddItem" 
     style="?android:attr/borderlessButtonStyle" /> 

Das Ansichtsmodell:

public class MyViewModel : MvxViewModel 
    { 
     private string m_ArticleName; 

     public string ArticleName 
     { 
      get 
      { 
       return m_ArticleName; 
      } 

      set 
      { 
       m_ArticleName = value; 
       RaiseAllPropertiesChanged(); 

       // this setter is never called 
      } 
     } 

     public MvxCommand AddItem 
     { 
      get; 
      private set; 
     } 

     public bool CanAddItem 
     { 
      get 
      { 
       return !String.IsNullOrEmpty(m_ArticleName); 
      } 
     } 

     public MyViewModel() 
     { 
      AddItem = new MvxCommand(doAddItem); 
     } 

     private void doAddItem() 
     { 
      // is never called in releases build because CanAddItem is never true 
     } 
    } 

Ich habe auch die folgende Aussage zu LinkerPleaseInclude.cs ohne Wirkung:

public void Include(AppCompatEditText text) 
    { 
     text.TextChanged += (sender, args) => text.Text = "" + text.Text; 
     text.Hint = "" + text.Hint; 
     text.Text = "Test"; 
    } 

Edit:

der gleichen effec t tritt auf, wenn ich den AppCompatEditText mit einem regulären EditText vertausche.

+0

, wenn etwas Arbeit in Debug-Version und nicht im Release-Modus arbeiten prüfe proguard machen. – Killer

+0

Proguard ist nicht aktiv (hat diese Einstellung aber nie geändert) –

Antwort

1

In MvvmCross wurde das Ereignis für die Textbindung geändert, um AfterTextChanged zu verwenden.

So können Sie die folgende Änderung in Ihrer LinkerPleaseInclude.cs

text.AfterTextChanged += (sender, args) => text.Text = "" + text.Text;

+0

Fantastisch! Es klappt. Habe meinen Tag gerettet. –

Verwandte Themen