public void PopulateGridView()
        {
            LoadingWindow.DoWorkWithModal(progress =>
            {
                this.Dispatcher.Invoke((Action) delegate
                {
                    transaksiRows.Clear();
                });
                TransaksiService.Transaksi[] transaksiList = Services.Instance.TransaksiClient.FetchAllTransaksi();
                foreach (TransaksiService.Transaksi transaksi in transaksiList)
                {
                    TransaksiService.Kategori kategori = Services.Instance.TransaksiClient.FetchKategori(transaksi.IdKategori);
                    TransaksiRow row = new TransaksiRow()
                    {
                        IdTransaksi    = (int)transaksi.Id,
                        NomorPolisi    = transaksi.NoPolisi,
                        TanggalMasuk   = transaksi.TanggalMasuk.ToString(),
                        JenisKendaraan = kategori.Keterangan
                    };
                    bool sudahKeluar     = transaksi.TanggalKeluar.HasValue;
                    long hargaJamPertama = kategori.HargaJamPertama;
                    long hargaPerJam     = kategori.HargaPerJam;
                    DateTime last;

                    if (sudahKeluar)
                    {
                        row.TanggalKeluar = transaksi.TanggalKeluar.Value.ToString();
                        last       = transaksi.TanggalKeluar.Value;
                        row.Status = "Sudah Keluar";
                    }
                    else
                    {
                        row.TanggalKeluar = "-";
                        last       = DateTime.Now;
                        row.Status = "Belum Keluar";
                    }

                    TimeSpan difference = last - transaksi.TanggalMasuk;
                    double hours        = difference.TotalHours;
                    int hour            = difference.Hours;
                    int minute          = difference.Minutes;
                    row.Durasi          = String.Format("{0} jam {1} menit", hour, minute);

                    hours = Math.Ceiling(hours);
                    if (hours == 0.0)
                    {
                        hours = hours + 0.5;
                    }
                    double biaya = (hargaJamPertama) + ((hours - 1) * hargaPerJam);
                    row.Biaya    = String.Format("Rp. {0},-", biaya);

                    this.Dispatcher.Invoke((Action) delegate
                    {
                        transaksiRows.Add(row);
                    });
                }
            });
        }
        private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            TransaksiService.Transaksi transaksiData = null;
            foreach (TransaksiService.Transaksi transaksi in transaksiList)
            {
                if (transaksi.NoPolisi.Equals((String)cbIdTransaksi.SelectedItem, StringComparison.CurrentCultureIgnoreCase))
                {
                    transaksiData = transaksi;
                }
            }
            kategori = Services.Instance.TransaksiClient.FetchKategori(transaksiData.IdKategori);

            txNoPolisi.Text   = transaksiData.NoPolisi;
            txKategori.Text   = kategori.Keterangan;
            txWaktuMasuk.Text = transaksiData.TanggalMasuk.ToString();
            transaksiDate     = transaksiData.TanggalMasuk;
            transaksi         = transaksiData;
        }