0

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.

0 Answers0