C#绑定儿童组合框选择

时间:2017-06-29 13:31:15

标签: c# windows xaml combobox binding

我是WPF / EF的新手,并且需要将两个组合框相互绑定。

启动实体的代码:

 private ShipperDBEntities shipper;
    public EnterIndicator()
    {
        InitializeComponent();
        shipper = new ShipperDBEntities();
        ReLoad();
    }

在我的Reload Sub中,我开始用LINQ查询实体。 首先,我的IndicatorComboBox,车型(船舶,汽车,不引人注目的轿车等......类型......)。 第二个ComboBox包含所有类型的定义。但是当我选择上面的一个指标时,第二个TypeComboBox可以选择合适的汽车类型。汽车的类型在数据库中定义。 以下是查询的代码:

  DataContext = null;
        var query = (from Fahrzeuges in shipper.Fahrzeuges
                     join typen in shipper.Fahrzeugtypens on Fahrzeuges.Fahrzeugtyp equals
                     typen.FahrzeugTyp_ID
                     where
                       Fahrzeuges.Versandunternehman.Versandunternehmen == LieferantenName
                     select new
                     {
                         Fahrzeuges.Kennzeichen,
                         Fahrzeuges.Fahrzeug_ID,
                         typen.FahrzeugTyp
                     });
        DataContext = query.ToList();


        FahrzeugTypBox.ItemsSource = (from Fahrzeugtypens in shipper.Fahrzeugtypens
                                      select new
                                      {
                                          FahrzeugTyp_ID = Fahrzeugtypens.FahrzeugTyp_ID,
                                          FahrzeugTyp = Fahrzeugtypens.FahrzeugTyp
                                      }).ToList();


        KennzeichenBox.SelectedIndex = 0;

我想我可以通过使用正确的xaml来解决它。 这是xaml的代码(但我真的不知道如何)。

     <ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding}"  SelectedValuePath="Fahrzeug_ID" DisplayMemberPath="Kennzeichen" VerticalAlignment="Top" Name="KennzeichenBox" Height="25" SelectionChanged="KennzeichenBox_SelectionChanged"/>


    <ComboBox Grid.Row="3" IsSynchronizedWithCurrentItem="True" 
              Grid.Column="1" ItemsSource="{Binding}"  
              SelectedValuePath="FahrzeugTyp_id" 
              DisplayMemberPath="FahrzeugTyp"
              SelectedValue="{Binding SelectedItem.FahrzeugTyp,ElementName=KennzeichenBox}"
              VerticalAlignment="Top" 

              Name="FahrzeugTypBox" Height="25"/>

我开始尝试使用第一个组合框选择的SelectedValue = {Binding}来解决问题。

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

       DataContext = this;

       public List<dynamic> Fahrzeuges { get; set; }
       public List<dynamic> Typen { get; set; }


       Fahrzeuges =  new List<dynamic>(from Fahrzeuges in shipper.Fahrzeuges
                     join typen in shipper.Fahrzeugtypens on 
                     Fahrzeuges.Fahrzeugtyp equals
                     typen.FahrzeugTyp_ID
                     where Fahrzeuges.Versandunternehman.Versandunternehmen == LieferantenName
                     select new
                     {
                         Kennzeichen = Fahrzeuges.Kennzeichen,
                         Fahrzeug_ID = Fahrzeuges.Fahrzeug_ID,
                         FahrzeugTyp = typen.FahrzeugTyp
                     });

      Typen = new List<dynamic>(from Fahrzeugtypens in shipper.Fahrzeugtypens
                                  select new
                                  {
                                      FahrzeugTyp_ID = Fahrzeugtypens.FahrzeugTyp_ID,
                                      FahrzeugTyp = Fahrzeugtypens.FahrzeugTyp
                                  });

然后在xaml:

<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding Fahrzeuges}"
          SelectedValuePath="Fahrzeug_ID" DisplayMemberPath="Kennzeichen"
          VerticalAlignment="Top" Name="KennzeichenBox" Height="25"
          SelectionChanged="KennzeichenBox_SelectionChanged"/>


<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding Typen}"  
          SelectedValuePath="FahrzeugTyp" 
          DisplayMemberPath="FahrzeugTyp"
          SelectedValue="{Binding ElementName=KennzeichenBox, Path=SelectedItem.FahrzeugTyp}"
          VerticalAlignment="Top" 
          Name="FahrzeugTypBox" Height="25"/>