ComboBox绑定到DataGrid WPF的值

时间:2011-04-17 23:16:58

标签: wpf silverlight xaml data-binding

我目前有一个组合框,其中包含从数据库绑定的数据:

<ComboBox x:Name="bookingComboBox"
          ItemsSource="{Binding ElementName=bookingDomainDataSource, Path=Data}"
          Height="20"
          VerticalAlignment="Top"
          Margin="387,79,114,0">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Width="150"
                           Text="{Binding Path=bookingName}" />
                <TextBlock Text="{Binding Path=bookingDate, StringFormat=d MMMM yyyy}"
                           Width="100" />
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

我也有datagrid:

<sdk:DataGrid AutoGenerateColumns="False"
              Height="200"
              HorizontalAlignment="Left"
              ItemsSource="{Binding Data, ElementName=bookingDomainDataSource}"
              Margin="147,132,0,0"
              x:Name="bookingDataGrid"
              RowDetailsVisibilityMode="VisibleWhenSelected"
              VerticalAlignment="Top"
              Width="400">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn x:Name="bookingIdColumn"
                                Binding="{Binding bookingId, Mode=OneWay}"
                                Header="Booking Id"
                                IsReadOnly="True"
                                Width="SizeToHeader" />
        <sdk:DataGridTextColumn x:Name="bookingNameColumn"
                                Binding="{Binding bookingName}"
                                Header="Booking Name"
                                Width="SizeToHeader" />
        <sdk:DataGridTextColumn x:Name="bookingDateColumn"
                                Binding="{Binding bookingDate}"
                                Header="Booking Date"
                                Width="SizeToHeader" />
        <sdk:DataGridTextColumn x:Name="paymentIdColumn"
                                Binding="{Binding paymentId}"
                                Header="Payment Id"
                                Width="SizeToHeader" />
        <sdk:DataGridTextColumn x:Name="showIdColumn"
                                Binding="{Binding showId}"
                                Header="Show Id"
                                Width="SizeToHeader" />
        <sdk:DataGridTextColumn x:Name="ticketIdColumn"
                                Binding="{Binding ticketId}"
                                Header="Ticket Id"
                                Width="SizeToHeader" />
        <sdk:DataGridTextColumn x:Name="ticketQuantityColumn"
                                Binding="{Binding ticketQuantity}"
                                Header="Ticket Quantity"
                                Width="SizeToHeader" />
        <sdk:DataGridTextColumn x:Name="userIdColumn"
                                Binding="{Binding userId}"
                                Header="User Id"
                                Width="SizeToHeader" />
    </sdk:DataGrid.Columns>
</sdk:DataGrid>

我希望数据网格更改为组合框中行集的行。

我该怎么做?

由于

2 个答案:

答案 0 :(得分:2)

如果所有控件都绑定到同一个源,则应该能够使用以下属性:

IsSynchronizedWithCurrentItem="True"

应该在ComboBox和DataGrid上设置哪个。

答案 1 :(得分:0)

必须将ItemsSource属性设置为集合(IEnumerable)。将ItemsSource设置为非集合对象意味着什么?它不会是物品的“来源”。

执行您要求的最简单方法是将数据网格的ItemsSource绑定到ComboBox的SelectedItem属性。如果您希望网格在组合框中显示所选项目的子数据,请尝试使用ItemsSource =“{Binding ElementName = bookingComboBox,Path = SelectedItem.CHILD_DATA_PROPERTY}”。