I have follow this tutorial and here the code I had just copied.
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
MainWindow = new MainWindow()
{
DataContext = new MainViewModel()
};
MainWindow.Show();
base.OnStartup(e);
}
}
in the MainWindow.Show() it say the Error: Items collection must be empty before using ItemsSource let me explain more in detail that I have two Window the first one is Ok. 1: when I Use currentViewModel as a MakeReservationviewModel it runs without error. but when I set CurrentViewmodel as ReservationListingViewModel I get the error As I explained. it is commented in the following Code
public class MainViewModel : ViewModelBase
{
public ViewModelBase CurrentViewModel { get; }
public MainViewModel()
{
CurrentViewModel = new MakeReservationviewModel();
// CurrentViewModel = new ReservationListingViewModel();
}
}
here is the ReservationListingViewModel
public class ReservationListingViewModel : ViewModelBase
{
private readonly ObservableCollection<ReservationViewModel> _reservations;
public ICommand MakeReservationCommand { get; }
public IEnumerable<ReservationViewModel> Reservations => _reservations;
public ReservationListingViewModel()
{
_reservations = new ObservableCollection<ReservationViewModel>();
_reservations.Add(new ReservationViewModel(new Reservation(new RoomID(1, 2), "F1", DateTime.Now, DateTime.Now)));
_reservations.Add(new ReservationViewModel(new Reservation(new RoomID(3, 4), "F2", DateTime.Now, DateTime.Now)));
_reservations.Add(new ReservationViewModel(new Reservation(new RoomID(2, 1), "w3", DateTime.Now, DateTime.Now)));
}
}
and the ReservationViewModel
public class ReservationViewModel : ViewModelBase
{
private readonly Reservation _reservation;
public string? RoomID => _reservation.RoomID?.ToString();
public String? Username => _reservation.Username;
public DateTime StartDate => _reservation.StartTime.Date;
public DateTime EndDate => _reservation.EndTime.Date;
public ReservationViewModel(Reservation reservation)
{
_reservation = reservation;
}
}
this is ReservationListingView
in this window I have listview which shows me those I hardCoded in ReservationListingViewModel
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="View Reservations"
Style="{StaticResource Header}"
Grid.Column="0"/>
<Button Content="Make Reservation"
Command="{Binding MakeReservationCommand}"
Margin="200 5 10 5"
Grid.Row="1"/>
</Grid>
<ListView Grid.Row="1"
Margin="0 25 0 0"
ItemsSource="{Binding Reservations}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" >
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<GridView>
<GridViewColumn Header="Room ID">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding RoomID}"
HorizontalAlignment="Center"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="UserName">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Username}"
Padding="0 0 20 0"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Start Date">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding StartDate}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="End Date">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding EndDate}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView>
</Grid>
I just confused how my code gets error but in the tutorial is without error. where is my problem.