problem z wiązaniem danch - odwołanie do obiektu nie zostało ustawione na wysteapienie obiektu

0

Witam

Mam problem z wiązaniem danych, chociaż może bardziej z ustawieniem na poczatku wartości. Mam klasę klient, która posiada listę różnych typów kont (lokata, debet, biezace) następnie w mainwindow mam kilka zaincjowanych wartości - dodane do combobox nazwiska przy czym nazwiska to składowe klienta tak samo jak typy kont są w konstruktorze u klienta. Chodzi mi o to że po wyborze z cmb nazwiska chcę aby w textboxie pojawił mi się nr tego klienta (u jednego klienta jest on celowo ustawiony aby móc testować). W zdarzeniu cmb selectedchange stworzyłam jakoby alias obiektu klasy klient i teraz jak próbuję wybrać z listy nazwisko to dostaje błąd odwołanie do obiektu nie zostało ustawione na wywstapienie obiektu. Poniżej kody klasy Biezące bo dla niej w mainwindow.xaml.cs przypisałam wartość, kod klasy klienta, xaml.cs, xaml

xaml.cs

    public partial class MainWindow : Window
    {  
        public ObservableCollection<Klient> ktosie= new ObservableCollection<Klient>();

        public MainWindow()
        {

            ObservableCollection<Klient> ktosie = new ObservableCollection<Klient>();
            ObservableCollection<Biezace> rory = new ObservableCollection<Biezace>();
            InitializeComponent();
             DataContext = ktosie;
            //ObservableCollection<Klient> ktosie = new ObservableCollection<Klient>();
            //ObservableCollection<Biezace> rory = new ObservableCollection<Biezace>();

            Klient k = new Klient("Bas");
            ktosie.Add(new Klient("Bas"));
            ktosie.Add(new Klient("Kowalski"));
            rory.Add(new Biezace());
           ktosie.Add(new Klient("Nowak") {  nazwisko = "Nowak" , Biezace = new Biezace() { IdROR = 20 } });  // chce aby ta 20 była w textbox
            ktosie.Add(new Klient("Iksianski"));
           Biezace b = new Biezace();
           Debet d = new Debet();
            Lokata lok = new Lokata(20, 4);
            var lk = new ListaKont();
            ktosie.Add(new Klient("Ktos"));
            var nowyklient = new Klient("Ktos");
            var nowalista = new ListaKont();
            nowalista.Debet = Debet.Debet1;
            nowyklient.jakieKonta.Add(nowalista);
            nowyklient.jakieKonta.Add(nowalista);
            var noweROR = new Biezace();
            var noweLokata = new Lokata(30, 20);
            var noweDebet = new Debet();
            nowyklient.jakieKonta.Add(nowalista);
            Klient c = new Klient("x");
            ListaKont lc = new ListaKont();
            c.ToString();

            c.jakieKonta.Add(new ListaKont());

            klienci.ItemsSource = ktosie;
    
            klienci.Focus();
        
            klienci.Focus();

            klienci.SelectedItem = 0;
            listakont.ItemsSource = ktosie.ToString();
        }

        private void listakont_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Klient k = new Klient("Bas");
           ListaKont lk = ((sender as ListBox).SelectedItem as ListaKont);
        }

        private void klienci_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

            Klient k1 = klienci.SelectedItem as Klient;
            k1.Biezace.NumerSaldoROR.ToString();
            wyswId.Text = k1.Biezace.NumerSaldoROR.ToString();
   }
    }

klasa klient

   public class Klient 
    {
        private static int KlientID = 1;
        public string numer { get; set; }

        public int numerklienta { get; set; }
        public string nazwisko { get; set; }

        public ObservableCollection<ListaKont> jakieKonta  = new ObservableCollection<ListaKont>();
        public ObservableCollection<Biezace> rory  = new ObservableCollection<Biezace>();
        public ObservableCollection<Lokata> lokaty = new ObservableCollection<Lokata>(); 
        public ObservableCollection<Debet> debety = new ObservableCollection<Debet>();

        public Lokata Lokata { get; set; }
        public Debet Debet { get; set; }
        public Biezace Biezace { get; set; }

        IEnumerable<Debet> debet;
        IEnumerable<Lokata> lokata;
        IEnumerable<Biezace> biezace;
        public Klient(string nazwisko)
        {
            this.nazwisko = nazwisko;
            this.jakieKonta = new ObservableCollection<ListaKont>();
            rory.Add(new Biezace());
            lokaty.Add(new Lokata(30, 4));
            debety.Add(new Debet());
        }

        public void dodajkonto()
        {
            Biezace b = new Biezace();
            Lokata lok = new Lokata(20, 30);
            Debet d = new Debet();
            ListaKont lkk = new ListaKont();
            jakieKonta.Add(lkk);
            lkk.Biezace = new Biezace();
            lkk.Debet = new Debet();
            lkk.Lokata = new Lokata(20,30);
           }
         public override string ToString()
        {
            //return nazwisko + " " + imie + " [" + sr + "]";
            string s = this.nazwisko + " ";// + String.Format("{0:N2}", srednia());
            
            return s;
        }

    }

klasa biezące

    public class Biezace : Konto, Inrkl
    {
        public int IdROR { get; set; }

        public double saldoR;
      //  internal static Biezace Biezace1;

        public string numerklienta { get; set; }
        public Biezace()
        {
            this.numerklienta = numerklienta;
            this.IdROR = IdROR;
        }
         public int GenrujIdR()
        {
            IdROR = base.GenerujNr();
            return IdROR;
        }
        public double Wplacaj(double kwota)
        {
            saldoR=base.Wplac(kwota);
            double RORsaldo = saldoR;
            return RORsaldo;
        }
        public double Wyplacaj(double kwota)
        {
            if (saldoR >= kwota)
                saldoR = base.Wyplac(kwota);
            double RORsaldo = saldoR;
            return RORsaldo;
        }
        public double RORsaldo { get; set; }
        public string NumerSaldoROR
        {
            get
            {
                string nrk = IdROR.ToString();
                string sald = RORsaldo.ToString();
                return "ROR" + " " + nrk + " " + sald;
            }
        }

        public override string ToString()
        {
            string num = IdROR.ToString();
            string stan = RORsaldo.ToString();

            return num + " " + stan;
        }
    }

xaml

<Window x:Class="kontowe.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:kontowe"
        mc:Ignorable="d"
        Title="MainWindow" Height="400" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="78*"/>
            <RowDefinition Height="196*"/>
            <RowDefinition Height="95*"/>
        </Grid.RowDefinitions>
        <Label Content="Wybierz klienta" HorizontalAlignment="Left" Height="28" Margin="10,20,0,0" VerticalAlignment="Top" Width="122"/>
        <ComboBox x:Name="klienci" HorizontalAlignment="Left" Height="28" Margin="162,20,0,0" VerticalAlignment="Top" Width="191"
                 ItemsSource="{Binding ktosie}" SelectionChanged="klienci_SelectionChanged" />
        <Button x:Name="nowyklient" Content="Dodaj" HorizontalAlignment="Left" Margin="406,23,0,0" VerticalAlignment="Top" Width="75" Height="20"/>
        <GroupBox x:Name="gbListakont" Header="Konta klienta" HorizontalAlignment="Left" Height="174" Margin="17,19,0,0" Grid.Row="1" VerticalAlignment="Top" Width="471">
            <Grid x:Name="gridklienta" HorizontalAlignment="Left" Height="134" Margin="10,10,0,0" VerticalAlignment="Top" Width="432">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="317*"/>
                    <ColumnDefinition Width="115*"/>
                </Grid.ColumnDefinitions>
                <Button x:Name="nowekonto" Content="Dodaj konto" Grid.Column="1" HorizontalAlignment="Left" Height="21" Margin="14,15,0,0" VerticalAlignment="Top" Width="91"/>
                <Button x:Name="usuwaniekonta" Content="Usuń konto" Grid.Column="1" HorizontalAlignment="Left" Height="21" Margin="14,57,0,0" VerticalAlignment="Top" Width="91"/>
                <ListBox x:Name="listakont" HorizontalAlignment="Left" Height="114" Margin="0,10,0,0" VerticalAlignment="Top" Width="307"
                         DisplayMemberPath="NumerSaldoLok"/>
            </Grid>
        </GroupBox>
        <GroupBox x:Name="obsluga" Header="Operacje konta" HorizontalAlignment="Left" Height="75" Margin="25,10,0,0" Grid.Row="2" VerticalAlignment="Top" Width="473">
            <Grid x:Name="gridkonta" HorizontalAlignment="Left" Height="38" Margin="4,2,0,0" VerticalAlignment="Top" Width="453">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="206*"/>
                    <ColumnDefinition Width="247*"/>
                </Grid.ColumnDefinitions>
                <TextBox HorizontalAlignment="Left" Height="28" Margin="10,10,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="186"/>
                <Button x:Name="wplata" Content="Wpłać" Grid.Column="1" HorizontalAlignment="Left" Height="28" Margin="19,10,0,0" VerticalAlignment="Top" Width="92"/>
                <Button x:Name="wyplata" Content="Wypłać" Grid.Column="1" HorizontalAlignment="Left" Height="28" Margin="148,10,0,0" VerticalAlignment="Top" Width="89"/>
            </Grid>
        </GroupBox>
        <TextBox x:Name="wyswId" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap"  VerticalAlignment="Top" Width="120" Margin="25,53,0,0"
                 Text="{Binding Path=biezace.numerklienta, UpdateSourceTrigger=PropertyChanged}"/>

    </Grid>
</Window>

0

Kod wydaje się okej. A to, że wywala null to dlatego, że obiekty na liście nie mają zainicjowanych właściwości.
Jak wybierzesz osobę "Nowak" to powinno działać, bo ma zainicjowane pole "Biezace"

1 użytkowników online, w tym zalogowanych: 0, gości: 1