我之前发布了一个类似的问题,但是我在将数据从 ViewModel 获取到 View 时遇到了问题。问题在于在绑定到视图时从存储数据的对象中取出数据。我创建了一个声明 3 个项目的类,我用它们来帮助填充将绑定到视图中的 ListBox 的项目的 ObservableCollection。我不确定我是否正确地解决了这个问题,所以为了说明,我将在下面显示:
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,以便我可以将它绑定到另一个页面中的视图。
主视图模型.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 绑定到要在列表框中显示的视图
收藏页面.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>
收藏夹页面.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?我在某处做错了什么,还是我应该做一些不同的事情来正确设置数据上下文?