[英]C# WPF Binding between combobox and listbox
我在组合框和列表框之间存在绑定问题。 我有四个类Account1,Account2,Account3,Client。 因此,客户类有一个包含帐户的3个列表。 在类client中有3个列表: List<Account1>
, List<Account2>
, List<Account3>
。
在xaml MainWindow中,我有一个带有客户姓氏的组合框和一个带有客户帐户的列表框,而我的问题是,如果我在组合框中选择,则客户姓氏在列表框中应显示此客户的带有帐户的列表。 我不知道该怎么做。
对不起,我的英语不是我妈妈的语言。
a
<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="71*"/>
<RowDefinition Height="203*"/>
<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"
DataContext="{Binding ElementName=lbStudenci, Path=SelectedItem}"/>
<Button x:Name="nowyklient" Content="Dodaj" HorizontalAlignment="Left" Margin="406,23,0,0" VerticalAlignment="Top" Width="75"/>
<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"/>
<TextBox x:Name="listakont" HorizontalAlignment="Left" Height="124" Margin="20,0,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="279"
Text="{Binding Path=jakiekonta, UpdateSourceTrigger=PropertyChanged}"/>
</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>
</Grid>
类客户
public class Klient
{
private static int KlientID = 1;
public string numer { get; set; }
public string numerklienta { get; set; }
public string nazwisko { get; set; }
public List<Biezace> rory = new List<Biezace>();
public List<Lokata> lokaty = new List<Lokata>();
public List<Debet> debety = new List<Debet>();
public Klient(string nazwisko)
{
this.numerklienta = (KlientID++).ToString();
this.nazwisko = nazwisko;
rory.Add(new Biezace());
lokaty.Add(new Lokata());
debety.Add(new Debet());
jakieKonta.Add(new ListaKont());
}
public Klient(string nazwisko, string nur)
{
this.numerklienta = nur;
this.nazwisko = nazwisko;
rory.Add(new Biezace());
lokaty.Add(new Lokata());
debety.Add(new Debet());
jakieKonta.Add(new ListaKont());
}
public override string ToString()
{
//return nazwisko + " " + imie + " [" + sr + "]";
string s = this.nazwisko + " ";// + String.Format("{0:N2}", srednia());
return s;
}
}
简化答案,使总体结构清晰:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ComboBox Grid.Column="0"
x:Name="ClientsComboBox"
ItemsSource="{Binding Clients}"/>
<ListBox Grid.Column="1"
ItemsSource="{Binding ElementName=ClientsComboBox, Path=SelectedItem.rory}"/>
<ListBox Grid.Column="2"
ItemsSource="{Binding ElementName=ClientsComboBox, Path=SelectedItem.lokaty}"/>
<ListBox Grid.Column="3"
ItemsSource="{Binding ElementName=ClientsComboBox, Path=SelectedItem.debety}"/>
</Grid>
这样,列表框便会绑定到组合框中的所选项目。
请注意,如果在从列表中添加或删除项目时组合框和列表框应自动更新,则应使用ObservableCollections替换列表,如下所示:
public class Klient
{
private static int KlientID = 1;
public string numer { get; set; }
public string numerklienta { get; set; }
public string nazwisko { get; set; }
public ObservableCollection<Biezace> rory = new ObservableCollection<Biezace>();
public ObservableCollection<Lokata> lokaty = new ObservableCollection<Lokata>();
public ObservableCollection<Debet> debety = new ObservableCollection<Debet>();
如果Klient的属性和帐户类也可以更改,则这些类也应实现INotifyPropertyChanged。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.