在Itemscontrol中绑定Comboboxes

时间:2016-05-20 07:29:04

标签: wpf data-binding

我在ComboBox'esItemsControl的组合遇到问题。 我要做的是创建一个ComboBox'es列表。在开始时,只有一个默认值ComboBox具有默认值。如果您选择除默认类型之外的任何其他类型,则会添加一个新的ComboBox,其中包含默认类型。 现在,List中的每个项目实际上包含2个Combobox'es。第二个框显示数字,此类型存在。

之前: Before

后: After

现在,如果ItemsControl中的任何其他数字发生变化,我想更新第二个框中的数字。我该怎么做?

以下是相关代码:

<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>

这些是列表:

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

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

这些是属性:

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); }
    }
}

1 个答案:

答案 0 :(得分:0)

首先,您可以通过PropertyChanged事件观察您的属性ChosenAppartmentTypeList并更新ApartmentType项。 Reference

其次,第二个组合框上的SelectedItem必须双向绑定。