2016-08-30 6 views
1

Hat jemand erfolgreich eine Zwei-Wege-Bindung auf einem TextView mit MVVM Light implementiert? Zwei-Wege funktioniert perfekt mit EditView, aber in dem Moment versuche ich Zwei-Wege-Bindung mit TextView - nur One-Way-Bindung funktioniert. Hat jemand einen Einblick, warum, bitte?MVVM Light TextView Zwei-Wege-Bindung in Xamarin (Android)

Ansicht Modell:

private string _someField; 
public string SomeField 
{ 
    get { return _someField; } 
    set { Set(ref _someField, value); } 
} 

Ausblick:

private EditText _editableText; 
public EditText EditableText; 
{ 
    get { return _editableTex ?? (_editableTex = FindViewById<EditText>(Resource.Id.editText1)); } 
} 

private TextView _simpleText 
public TextView SimpleText 
{ 
    get { return _simpleText ?? (_simpleText = FindViewById<TextView>(Resource.Id.textDateDisplay)); } 
} 

protected override void OnCreate(Bundle savedInstanceState) 
{ 
    bindings.Add(this.SetBinding(() => vm.SomeField,() => EditableText.Text, BindingMode.TwoWay)); 
    bindings.Add(this.SetBinding(() => vm.SomeField,() => SimpleText.Text, BindingMode.TwoWay)); 
} 

keine Fehler geworfen werden. Aber wenn ich (in Code) der View den Text der EditableText (EditableText.Text="asdf";) ändern, löst das entsprechende Set { Set(ref _someField, value); } in VewModel aus. Es löst natürlich auch aus, wenn ich einfach das EditText Widget eintippe.

Wenn ich jedoch (in Code) die Texteigenschaft des SimpleText (SimpleText.Text="2145";) ändern, löst es nicht das entsprechende Set aus.

Weiß jemand warum?

Vielen Dank für die Hilfe, mike

Antwort

0

Sie können keine Zwei-Wege-Bindung mit TextView s eingestellt, weil sie durch Benutzer nicht zulassen.

Wenn Sie MVVM-Muster verwenden, sollten Sie die Ansicht nie aktualisieren. Sie sollten die gebundene Modelleigenschaft aktualisieren. Sie sollten also SimpleText.Text = "2145"; durch vm.SomeField = "2145"; ersetzen.

Verwandte Themen