以前に同様の質問を投稿しましたが、ViewModelからViewにデータを取得する際に問題が発生していました。問題は、ビューにバインドするときに、データが保存されているオブジェクトからデータを取得することにあります。ビュー内のリストボックスにバインドされるアイテムのObservableCollectionにデータを入力するために使用する、3つのアイテムを宣言するクラスを作成しました。これについて正しく行っているかどうかわからないので、説明のために以下に示します。
ListItem.cs(これは、アイテムのコレクションを作成するために定義したカスタムクラスです)
public string Favicon
{
get;
set;
}
public string Name
{
get;
set;
}
public string Address
{
get;
set;
}
MainPage.xaml.cs(ここでは、ObservableCollectionに追加する各アイテムのデータを保存します)
void addToFavorites_Click(object sender, EventArgs e)
{
var favoriteItem = new ListItem { Favicon = "/Image/1.jpg", Name = "item1", Address = "some address" };
Settings.FavoritesList.Value.Add(favoriteItem);
}
Settings.cs(FavoritesList ObservableCollectionを格納するために使用される設定クラス)
public class Settings
{
public static Setting<ObservableCollection<ListItem>> FavoritesList = new Setting<ObservableCollection<ListItem>>("Favorites", new ObservableCollection<ListItem>());
}
FavoritesList
ここで、ViewModelに保存されているこのObservableCollectionを呼び出して、別のページのビューにバインドしようとしています。
MainViewModel.cs
public ObservableCollection<ListItem> FavoriteItems { get; private set; }
public MainViewModel()
{
FavoriteItems = Settings.FavoritesList.Value;
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
次に、FavoritesPage.xamlに移動するときに、ViewModelをビューにバインドしてリストボックスに表示したいと思います。
FavoritePage.xaml
<ListBox x:Name="FavoritesListBox" ItemsSource="{Binding FavoriteItems}" SelectionChanged="FavoritesListBox_SelectionChanged">
<StackPanel Orientation="Horizontal" Margin="12,0,12,0">
<Image x:Name="favicon" Source="{Binding Favicon}" Width="50" Height="50"/>
<StackPanel>
<TextBlock x:Name="favoritesName" Text="{Binding Name}" FontSize="{StaticResource PhoneFontSizeExtraLarge}"/>
<TextBlock x:Name="favoritesAddress" Text="{Binding Address}" Margin="12,0,0,0"/>
</StackPanel>
</StackPanel>
</ListBox>
FavoritePage.xaml.cs
public FavoritesPage()
{
InitializeComponent();
// Set the data context of the listbox control to the sample data
DataContext = App.ViewModel;
}
なんらかの理由で設定できませんDataContext = App.ViewModel;
。ListItemクラスを使用してMainPage.xaml.csに値を最初に保存したときまで、問題を絞り込んだと思います。ここからListPickerにデータを入力する方法がわかりませんか?どこかで何か間違ったことをしていますか、それともデータコンテキストを正しく設定するために別のことをする必要がありますか?