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>