2016-05-20 36 views
0

Ich habe Probleme mit einer Kombination von ComboBox'es innerhalb einer ItemsControl. Was ich versuche, ist eine Liste von ComboBox'es zu erstellen. Zu Beginn gibt es nur einen Standardwert ComboBox mit einem Standardwert. Wenn Sie einen anderen Typ als den Standardtyp auswählen, wird ein neuer ComboBox mit dem Standardtyp hinzugefügt. Nun enthält jedes Element in der List tatsächlich 2 Combobox'es. Das zweite Feld zeigt die Nummer, dieser Typ ist vorhanden.Binding Comboboxen in einem Itemscontrol

Bevor: Before

Nach: After

Jetzt habe ich die Zahlen in der zweiten Box, wenn eine andere Zahl in den ItemsControl Änderungen aktualisieren möchten. Wie mache ich das?

ist hier der entsprechende Code:

<ItemsControl Grid.Column="0" Grid.Row="2" ItemsSource="{Binding ChosenAppartmentTypeList}" Margin="10"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <StackPanel Orientation="Horizontal"> 
      <ComboBox Margin="10" SelectedIndex="0" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:GeneralProjectDataView}}, Path=DataContext.AppartmentTypeList}"> 
       <i:Interaction.Triggers> 
        <i:EventTrigger EventName="SelectionChanged"> 
        <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:GeneralProjectDataView}},        Path=DataContext.ComboBoxSelectedItemChangedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox},               Path=SelectedItem}" /> 
        </i:EventTrigger> 
        </i:Interaction.Triggers> 
        <ComboBox.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Name}" /> 
        </DataTemplate> 
        </ComboBox.ItemTemplate> 
      </ComboBox> 
      <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:GeneralProjectDataView}}, Path=DataContext.NumberList}" SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ItemsControl}, Path=SelectedItem.Count}" SelectedIndex="0"> 
       <ComboBox.ItemsPanel> 
       <ItemsPanelTemplate> 
       <VirtualizingStackPanel /> 
      </ItemsPanelTemplate> 
      </ComboBox.ItemsPanel> 
     </ComboBox> 
     </StackPanel> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Das sind die Listen:

public ObservableCollection<AppartmentType> AppartmentTypeList { get; set; } 

    public ObservableCollection<AppartmentType> ChosenAppartmentTypeList { get; set; } 

Und das sind die Eigenschaften:

public class AppartmentType : ValidatableBindableBase 
{ 
    private string name; 
    private int count; 

    public string Name 
    { 
     get { return name; } 
     set { SetProperty(ref name, value); } 
    } 

    public int Count 
    { 
     get { return count; } 
     set { SetProperty(ref count, value); } 
    } 
} 

Antwort

0

Erstens können Sie Ihr Eigentum ChosenAppartmentTypeList beobachten über das PropertyChanged-Ereignis und aktualisieren Sie die ApartmentType-Elemente. Reference

Zweitens muss Ihr SelectedItem auf der zweiten Combobox in beide Richtungen gebunden sein.

Verwandte Themen