2016-05-30 6 views
0

Ich habe ein MVVM Licht Ansichtsmodell, das innerhalb eines Elements hat:MVVM Licht mit Xamarin zu Listview-Bindung

public ObservableCollection<ObservableKeyValuePair<string, string>> OtherParticipants { get; set; } 

Der Artikel selbst ist ziemlich einfach

[ImplementPropertyChanged] 
public class ObservableKeyValuePair<TKey, TValue> 
{ 
    public TKey Key { get; set; } 

    public TValue Value { get; set; } 
} 

Ich versuche, es zu binden zu meinem Xamarin.Android Listview wwith dies so etwas wie:

var vm = VmLocator.Chat; 
vm.InitClient(client); 
vm.InitModel(); 

var contactsList = FindViewById<ListView>(Resource.Id.lvContacts); 

vm.SetBinding(() => vm.OtherParticipants, contactsList.Adapter, BindingMode.TwoWay); 

Das Problem ist, dass diese Linie als Highlights Intuitiv falsch und ich bin absolut sicher, dass contactsList.Adapter nicht die Art ist, wie ich meine Sammlung daran binden kann, aber was ist der richtige Weg? Wie kann ich das Anzeigeelement so definieren, wie ich es in WPF tun kann? Etwas wie:

<ListBox SelectionMode="Single" ItemsSource="{Binding OtherParticipants}" SelectedItem="{Binding SelectedParticipant}" DisplayMemberPath="Value"/> 
+0

Können Sie ein Beispiel oder einen Screenshot in Bezug auf zeigen "Das Problem ist, dass diese Zeile als syntaktisch falsch hervorhebt", diese Aussage macht es Ihnen irgendwie schwer, Ihnen zu helfen. – yams

+0

Es ist nicht wirklich relevant, ich bin mir ziemlich sicher, dass ich etwas falsch mache, um diese Arbeit zu machen. Was ich also wirklich brauche, ist ein Beispiel, wie man das macht oder eine Anleitung, wie dies genau gemacht wird gegen Androids ListView – HardLuck

+0

Es ist tatsächlich relevant. Deshalb hat niemand geantwortet. Gib wenigstens einen Screenshot von dem, was du erwartest oder willst. – yams

Antwort

0

Ich konnte eine funktionierende Antwort für dieses Problem finden.

protected override void OnCreate(Bundle savedInstanceState) 
{ 
    base.OnCreate(savedInstanceState); 

    SetContentView(Resource.Layout.MainChat); 

    var client = Nav.GetAndRemoveParameter<MyClient>(Intent); 

    var vm = VmLocator.Chat; 
    vm.InitClient(client); 
    vm.InitModel(); 

    var contactsList = FindViewById<ListView>(Resource.Id.lvContacts); 

    contactsList.Adapter = vm.OtherParticipants.GetAdapter(ContactsListViewTemplate); 
} 

private View ContactsListViewTemplate(int position, ObservableKeyValuePair<string, string> participant, 
    View convertView) 
{ 
    var view = convertView ?? LayoutInflater.Inflate(Resource.Layout.ParticipantsListItem, null); 

    var firstName = view.FindViewById<TextView>(Resource.Id.tvParticipantName); 

    firstName.Text = participant.Value; 

    return view; 
} 

Der wertvolle Teil davon sind die letzten 2 Zeilen OnCreate Methode. Ich habe die Antwort gefunden here