Note that there are some explanatory texts on larger screens.

plurals
  1. POListbox data binding with Viewmodel not showing up windows phone
    text
    copied!<p>I am working on a windows phone application that uses a local database and MVVM. My listbox is not showing the WeatherList that it is binded to. I am adding a single WeatherItem to the local database in the App.xaml.cs file and it's being added successfully, but it is not showing up in the listbox when running the app. I would really appreciate any help. I have the following setup:</p> <p>MainPage.xaml:</p> <pre><code>&lt;phone:PhoneApplicationPage.Resources&gt; &lt;DataTemplate x:Key="ForecastListItemTemplate"&gt; &lt;StackPanel Orientation="Horizontal" Margin="0, 400, 0, 0" Width="480" Height="100"&gt; &lt;StackPanel Width="190" VerticalAlignment="Center"&gt; &lt;TextBlock HorizontalAlignment="Center" Text="{Binding Path=DayOfWeek}" FontFamily="Segoe WP" FontWeight="ExtraBold" FontSize="36" Foreground="#545d61"&gt;&lt;/TextBlock&gt; &lt;TextBlock HorizontalAlignment="Center" Text="{Binding Path=ItemDay}" FontFamily="Segoe WP Light" FontSize="36" Foreground="#545d61"&gt;&lt;/TextBlock&gt; &lt;/StackPanel&gt; &lt;Image Height="100" Width="100" Source="{Binding Path=ImageSource}"&gt;&lt;/Image&gt; &lt;StackPanel Width="190" VerticalAlignment="Center"&gt; &lt;StackPanel HorizontalAlignment="Center" Orientation="Horizontal"&gt; &lt;TextBlock Text="↑" FontFamily="Segoe WP" FontWeight="ExtraBold" FontSize="36" Foreground="#545d61"&gt;&lt;/TextBlock&gt; &lt;TextBlock HorizontalAlignment="Center" Margin="4, 0, 4, 0" Text="{Binding Path=High}" FontFamily="Segoe WP" FontWeight="ExtraBold" FontSize="36" Foreground="#0da5d0"&gt;&lt;/TextBlock&gt; &lt;TextBlock Text="↓" FontFamily="Segoe WP" FontWeight="ExtraBold" FontSize="36" Foreground="#545d61"&gt;&lt;/TextBlock&gt; &lt;TextBlock HorizontalAlignment="Center" Margin="4, 0, 4, 0" Text="{Binding Path=Low}" FontFamily="Segoe WP" FontWeight="ExtraBold" FontSize="36" Foreground="#0da5d0"&gt;&lt;/TextBlock&gt; &lt;/StackPanel&gt; &lt;TextBlock HorizontalAlignment="Center" Text="{Binding Path=Condition}" FontFamily="Segoe WP Light" FontSize="24" Foreground="#545d61"&gt;&lt;/TextBlock&gt; &lt;/StackPanel&gt; &lt;/StackPanel&gt; &lt;/DataTemplate&gt; &lt;/phone:PhoneApplicationPage.Resources&gt; &lt;!--LayoutRoot is the root grid where all page content is placed--&gt; &lt;Grid x:Name="LayoutRoot" Background="#e1e4e4"&gt; &lt;Grid.RowDefinitions&gt; &lt;RowDefinition Height="Auto"/&gt; &lt;RowDefinition Height="*"/&gt; &lt;/Grid.RowDefinitions&gt; &lt;ListBox x:Name="WeatherListBox" ItemsSource="{Binding WeatherList}" Margin="0, 400, 0, 96" Width="480" ItemTemplate="{StaticResource ForecastListItemTemplate}"&gt; &lt;/ListBox&gt; &lt;/Grid&gt; </code></pre> <p>WeatherViewModel.cs</p> <pre><code>public class WeatherViewModel : INotifyPropertyChanged { // LINQ to SQL data context for the local database. private ToDoDataContext weatherDB; // Class constructor, create the data context object. public WeatherViewModel() { weatherDB = new ToDoDataContext(); } // All to-do items. private ObservableCollection&lt;WeatherItem&gt; _weatherList; public ObservableCollection&lt;WeatherItem&gt; WeatherList { get { return _weatherList; } set { _weatherList = value; NotifyPropertyChanged("WeatherList"); } } // Write changes in the data context to the database. public void SaveChangesToDB() { weatherDB.SubmitChanges(); } // Query database and load the collections and list used by the pivot pages. public void LoadCollectionsFromDatabase() { // Specify the query for all to-do items in the database. var weatherItemsInDB = from WeatherItem weather in weatherDB.Forecasts select weather; // Query the database and load all to-do items. WeatherList = new ObservableCollection&lt;WeatherItem&gt;(weatherItemsInDB); } // Add a to-do item to the database and collections. public void AddWeatherItem(WeatherItem newWeatherItem) { // Add a to-do item to the data context. weatherDB.Forecasts.InsertOnSubmit(newWeatherItem); // Save changes to the database. weatherDB.SubmitChanges(); // Add a to-do item to the "all" observable collection. WeatherList.Add(newWeatherItem); } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; // Used to notify Silverlight that a property has changed. private void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #endregion } </code></pre> <p>ToDoDataContext.cs</p> <pre><code>public class ToDoDataContext : DataContext { // Pass the connection string to the base class. public ToDoDataContext() : base("Data Source=isostore:/AppDB.sdf") { } public ToDoCategory activeCategory; // Specify a table for the to-do items. public Table&lt;ToDoItem&gt; Items; // Specify a table for the categories. public Table&lt;ToDoCategory&gt; Categories; //Weather stuff public WeatherItem currentWeather; // Specify a table for the to-do items. public Table&lt;WeatherItem&gt; Forecasts; } [Table] public class WeatherItem : INotifyPropertyChanged, INotifyPropertyChanging { // Define ID: private field, public property, and database column. private int _weatherItemId; [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)] public int WeatherItemId { get { return _weatherItemId; } set { if (_weatherItemId != value) { NotifyPropertyChanging("WeatherItemId"); _weatherItemId = value; NotifyPropertyChanged("WeatherItemId"); } } } // Define item name: private field, public property, and database column. private string _itemDay; [Column] public string ItemDay { get { return _itemDay; } set { if (_itemDay != value) { NotifyPropertyChanging("ItemDay"); _itemDay = value; NotifyPropertyChanged("ItemDay"); } } } private string _dayOfWeek; [Column] public string DayOfWeek { get { return _dayOfWeek; } set { if (_dayOfWeek != value) { NotifyPropertyChanging("DayOfWeek"); _dayOfWeek = value; NotifyPropertyChanged("DayOfWeek"); } } } // Define completion value: private field, public property, and database column. private string _high; [Column] public string High { get { return _high; } set { if (_high != value) { NotifyPropertyChanging("High"); _high = value; NotifyPropertyChanged("High"); } } } private string _low; [Column] public string Low { get { return _low; } set { if (_low != value) { NotifyPropertyChanging("Low"); _low = value; NotifyPropertyChanged("Low"); } } } private string _condition; [Column] public string Condition { get { return _condition; } set { if (_condition != value) { NotifyPropertyChanging("Condition"); _condition = value; NotifyPropertyChanged("Condition"); } } } private string _imageSource; [Column] public string ImageSource { get { return _imageSource; } set { if (_imageSource != value) { NotifyPropertyChanging("ImageSource"); _imageSource = value; NotifyPropertyChanged("ImageSource"); } } } // Version column aids update performance. [Column(IsVersion = true)] private Binary _version; #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; // Used to notify that a property changed private void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #endregion #region INotifyPropertyChanging Members public event PropertyChangingEventHandler PropertyChanging; // Used to notify that a property is about to change private void NotifyPropertyChanging(string propertyName) { if (PropertyChanging != null) { PropertyChanging(this, new PropertyChangingEventArgs(propertyName)); } } #endregion } </code></pre> <p>Mainpage.xaml.cs</p> <pre><code>// Constructor public MainPage() { InitializeComponent(); this.DataContext = App.WeatherViewModel; } </code></pre> <p>App.xaml.cs</p> <pre><code>public partial class App : Application { private static ToDoViewModel viewModel; public static ToDoViewModel ViewModel { get { return viewModel; } } private static WeatherViewModel weatherViewModel; public static WeatherViewModel WeatherViewModel { get { return weatherViewModel; } } /// &lt;summary&gt; /// Provides easy access to the root frame of the Phone Application. /// &lt;/summary&gt; /// &lt;returns&gt;The root frame of the Phone Application.&lt;/returns&gt; public PhoneApplicationFrame RootFrame { get; private set; } /// &lt;summary&gt; /// Constructor for the Application object. /// &lt;/summary&gt; public App() { // Global handler for uncaught exceptions. UnhandledException += Application_UnhandledException; // Standard Silverlight initialization InitializeComponent(); // Phone-specific initialization InitializePhoneApplication(); // Show graphics profiling information while debugging. if (System.Diagnostics.Debugger.IsAttached) { // Display the current frame rate counters. Application.Current.Host.Settings.EnableFrameRateCounter = true; // Show the areas of the app that are being redrawn in each frame. //Application.Current.Host.Settings.EnableRedrawRegions = true; // Enable non-production analysis visualization mode, // which shows areas of a page that are handed off to GPU with a colored overlay. //Application.Current.Host.Settings.EnableCacheVisualization = true; // Disable the application idle detection by setting the UserIdleDetectionMode property of the // application's PhoneApplicationService object to Disabled. // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run // and consume battery power when the user is not using the phone. PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; } // Create the database if it does not exist. using (ToDoDataContext db = new ToDoDataContext()) { if (db.DatabaseExists() == false) { // Create the local database. db.CreateDatabase(); // Prepopulate the categories. db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Home" }); db.Categories.InsertOnSubmit(new ToDoCategory { Name = "Work" }); db.Categories.InsertOnSubmit(new ToDoCategory { Name = "School" }); db.Forecasts.InsertOnSubmit(new WeatherItem { DayOfWeek = "Mon", ItemDay = "Sept 4", Condition = "Mostly Sunny", High = "105", Low = "88", ImageSource = "images/Weather/45.png" }); // Save categories to the database. db.SubmitChanges(); } } // Create the ViewModel object. viewModel = new ToDoViewModel(); weatherViewModel = new WeatherViewModel(); // Query the local database and load observable collections. viewModel.LoadCollectionsFromDatabase(); weatherViewModel.LoadCollectionsFromDatabase(); } </code></pre> <p>Thanks!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload