ピッカーとMVVMバインディングの使い方について簡単なデモプロジェクトを作成しました。アイテムソースとしてのObservableCollection
を使用します。
ユーザーがピッカーからアイテムの1つを選択すると、値/ラベルの内容が変更されます。私はこのプロジェクトがあなたの問題を解決するために必要なものだと思う。
あなたは私たちにあなたの全体のコードを提供していないので、あなたの可能性のあるエラーを見るのは難しいでしょう。たぶん、これはあなたのために役立つことがあります。
デモ:
コードスニペット:
私のPersonクラスは次のようになります。
public class Person {
public int PersonId { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public string FullName { get { return $"{FName} {LName}"; } }
public string Biography { get; set; }
}
私のViewModel:
public class AllPersonsViewModel : INotifyPropertyChanged{
public ObservableCollection<Person> AllPersons { get; set; }
private Person selectedPerson;
public Person SelectedPerson {
get { return selectedPerson; }
set { selectedPerson = value;
OnPropertyChanged();
}
}
public AllPersonsViewModel() {
AllPersons = new ObservableCollection<Person>() {
new Person() {
Biography = "Lorem ipsum person 1",
FName = "Person",
LName = "One",
PersonId = 1,
},
new Person() {
Biography = "Lorem ipsum person 2",
FName = "Person",
LName = "Two",
PersonId = 2,
},
new Person() {
Biography = "Lorem ipsum person 3",
FName = "Person",
LName = "Three",
PersonId = 3,
},
};
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName]string propertyName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
私はBindingContext
として、このビューモデルを使用して1つのビューを持っている...とPicker
制御と私のページのXAMLはここにある:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XF.Picker.Demo.Views.PersonsPage">
<ContentPage.Content>
<StackLayout Orientation="Vertical">
<Picker Title="All person"
ItemDisplayBinding="{Binding FullName}"
ItemsSource="{Binding AllPersons}"
SelectedItem="{Binding SelectedPerson}"/>
<!-- Margin just to see picker dropdown and labels at the same time-->
<Label Text="{Binding SelectedPerson.FullName}" Margin="0,80,0,0"/>
<Label Text="{Binding SelectedPerson.Biography}"/>
</StackLayout>
</ContentPage.Content>
</ContentPage>
私はあなたがそれを見つけることができますgithubの上でこのコードプロジェクトを公開しhere
モデルとビューモデルも投稿する必要があります –
ItemsSourceでModeを削除し、SelectedItemでUpdate Mode = Defaultを削除できますか – Kowalski