Ich benutze MvvMCross schon seit einer Weile und dieser Code hat funktioniert. Ich habe die neuesten Updates installiert, aber ich kann nicht schwören, dass dies der Zeitpunkt war, an dem das Problem begann. Was passiert ist, dass ich einen Login-Bildschirm mit einfachen Textbindungen zum Benutzernamen und Passwort habe. Wenn ich mit Shared Runtime verwenden kompiliere, funktioniert es gut. Wenn dies nicht aktiviert ist, wird der Text nicht an die Textfelder gebunden. Mein Plan ist wie folgt:mvvmcross binding im Freigabemodus
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="250dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
android:background="@drawable/borderdoublewidth">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/InputTextView"
android:text="User Name" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/txtUserName"
style="@style/InputEditText"
local:MvxBind="Text UserName" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/InputTextView"
android:text="Password" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/txtPassword"
android:inputType="textPassword"
android:password="true"
style="@style/InputEditText"
local:MvxBind="Text Password" />
</LinearLayout>
<Button
android:text="Login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
local:MvxBind="Click CheckLogin" />
</LinearLayout>
</LinearLayout>
Meine Ansicht Modell ist wie folgt:
class LoginViewModel : MvxViewModel
{
public void Init()
{
}
public override void Start()
{
base.Start();
Task.Run(async() =>
{
var l = await ListDataSource.GetLocations();
Locations = l.Location.ToArray<string>();
});
}
public string Location
{
get
{
return Settings.Location;
}
set
{
Settings.Location = value;
RaisePropertyChanged(() => Location);
}
}
private string[] _Locations;
public string[] Locations
{
get
{
return _Locations;
}
set
{
_Locations = value;
RaisePropertyChanged(() => Locations);
}
}
private string _UserName;
public string UserName
{
get
{
return _UserName;
}
set
{
_UserName = value;
RaisePropertyChanged(() => UserName);
EventLog.Debug("UserName Changed <" + _UserName + ".");
}
}
private string _Password;
public string Password
{
get
{
return _Password;
}
set
{
_Password = value;
RaisePropertyChanged(() => Password);
}
}
public IMvxCommand CheckLogin
{
get
{
return new MvxCommand(() =>
ValidateDriver()
);
}
}
private bool LoggingIn = false;
private async void ValidateDriver()
{
if (Settings.Location == null)
{
MiscFunctions.messageBox("Please set the Location!");
return;
}
if (LoggingIn)
return;
LoggingIn = true;
//btnLogin.Focus(Windows.UI.Xaml.FocusState.Programmatic);
string VersionName = "";
MPS_Mobile_Warehouse.Droid.Views.LoginView act = (Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity as MPS_Mobile_Warehouse.Droid.Views.LoginView) ?? null;
if (act != null)
{
VersionName = act.GetAppVersionName();
}
//DriverName gets set in this call.
if (await ShipmentDataSource.CheckTabletUser(UserName, Password, VersionName))
{
ShowViewModel<MainViewModel>();
}
LoggingIn = false;
}
}
Die auf die CheckLogin Knopf Bindung scheint die Bindung zu funktionieren. Wenn der Aufruf von CheckTabletUser erfolgt, sind die Eigenschaften UserName und Password leer.
Ich bearbeite das, damit Leute meine LinkerPleaseInclude.cs Datei sehen können. Es ist die Vanille ein, die mit dem MvvmCross Starter Pack kommt:
public class LinkerPleaseInclude
{
public void Include(Button button)
{
button.Click += (s, e) => button.Text = button.Text + "";
}
public void Include(CheckBox checkBox)
{
checkBox.CheckedChange += (sender, args) => checkBox.Checked = !checkBox.Checked;
}
public void Include(Switch @switch)
{
@switch.CheckedChange += (sender, args) => @switch.Checked = [email protected];
}
public void Include(View view)
{
view.Click += (s, e) => view.ContentDescription = view.ContentDescription + "";
}
public void Include(TextView text)
{
text.TextChanged += (sender, args) => text.Text = "" + text.Text;
text.Hint = "" + text.Hint;
}
public void Include(CheckedTextView text)
{
text.TextChanged += (sender, args) => text.Text = "" + text.Text;
text.Hint = "" + text.Hint;
}
public void Include(CompoundButton cb)
{
cb.CheckedChange += (sender, args) => cb.Checked = !cb.Checked;
}
public void Include(SeekBar sb)
{
sb.ProgressChanged += (sender, args) => sb.Progress = sb.Progress + 1;
}
public void Include(Activity act)
{
act.Title = act.Title + "";
}
public void Include(INotifyCollectionChanged changed)
{
changed.CollectionChanged += (s, e) => { var test = $"{e.Action}{e.NewItems}{e.NewStartingIndex}{e.OldItems}{e.OldStartingIndex}"; };
}
public void Include(ICommand command)
{
command.CanExecuteChanged += (s, e) => { if (command.CanExecute(null)) command.Execute(null); };
}
public void Include(MvvmCross.Platform.IoC.MvxPropertyInjector injector)
{
injector = new MvvmCross.Platform.IoC.MvxPropertyInjector();
}
public void Include(System.ComponentModel.INotifyPropertyChanged changed)
{
changed.PropertyChanged += (sender, e) => {
var test = e.PropertyName;
};
}
public void Include(MvxTaskBasedBindingContext context)
{
context.Dispose();
var context2 = new MvxTaskBasedBindingContext();
context2.Dispose();
}
}
ich mein Problem behoben von 4.3.0 auf MvvmCross Version zurückkehrt. Ich lasse das offen für den Fall, dass ein Entwickler wissen muss, was in der neuesten Version passiert.
Haben Sie die 'LinkerPleaseInclude.cs' Datei in Ihrem Projekt? Das klingt vage vertraut zu http://stackoverflow.com/questions/16924178/issues-with-mvvmcross-and-linking-on-android –
Es ist ein häufiges Problem. Alle Eigenschaften wie 'TextView.Text' usw., an die Sie binden, sollten in' LinkerPleaseInclude.cs' erwähnt werden, die automatisch generiert wird, wenn Sie auf MvvmCross-Pakete verweisen. – foxanna
Ja. Es ist die Version, die im MvvMCross-Starterpaket enthalten ist. Ich habe sogar einen Eintrag für EditText hinzugefügt. EditText sollte mit dem Standard-TextView verknüpft sein, aber ich habe alles versucht, was mir einfällt. –