繁体   English   中英

组合框和列表框之间的C#WPF绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM