0

我知道这个问题是你们许多人已经发布的问题,但我仍然遇到问题。这个想法很简单:我有一个 DataGrid,当我在 DataGrid 中选择项目时,它应该在 DataForm 中的 ComboBox 中选择项目。我已经阅读了很多帖子,并且在我所做的事情中实现了一些想法,现在,我有了这个:

 <StackPanel Grid.Column="1" Grid.Row="4" Name="stackPanel1" Margin="0,0,0,-257">                    
                <sdk:DataGrid Name="PhysicalQuantitiesGrid"
                          MinHeight="100" IsReadOnly="True"
                          Margin="0,12,0,0"
                          ItemsSource="{Binding PhysicalQuantities}"
                          SelectedItem="{Binding Path=CurrentPhysicalQuantity, Mode=TwoWay}"                              
                          AutoGenerateColumns="False" VerticalGridLinesBrush="{x:Null}">
                    <sdk:DataGrid.RowDetailsTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical" Margin="5">
                                <StackPanel Orientation="Horizontal" Margin="5">
                                    <StackPanel Orientation="Vertical" Margin="5">
                                        <TextBlock
                                        FontSize="12"
                                        Width="Auto"                                            
                                        Text="Base unit term"/>
                                        <TextBlock 
                                            Foreground="CadetBlue" 
                                            FontSize="12"
                                            Width="Auto" 
                                            TextWrapping="Wrap"                                            
                                            Text="{Binding Path=Unit.Term}"/>
                                    </StackPanel>
                                    <StackPanel Orientation="Vertical" Margin="5">
                                        <TextBlock
                                            FontSize="12"
                                            Width="Auto"                                            
                                            Text="Short term"/>
                                        <TextBlock 
                                            Foreground="CadetBlue" 
                                            FontSize="12"
                                            Width="Auto" 
                                            TextWrapping="Wrap"                                                             
                                            Text="{Binding Path=Unit.ShortTerm}"/>
                                    </StackPanel>
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </sdk:DataGrid.RowDetailsTemplate>
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTextColumn Header="Term"                                                                                                 
                                            Binding="{Binding Path=Term}"
                                            FontSize="14"
                                            Foreground="DarkBlue"
                                            >
                        </sdk:DataGridTextColumn>
                    </sdk:DataGrid.Columns>
                </sdk:DataGrid>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,12,0,0">
                    <Button x:Name="NewPhysicalQuantity" Content="AddNew" Height="23" Click="NewPhysicalQuantity_Click"/>
                </StackPanel>
                <dataform:DataForm x:Name="PhysicalQuantityDetails" 
                                   Header="Fizicke velicine - detalji" 
                                   AutoGenerateFields="False" 
                                   AutoEdit="False"                                       
                                   CommandButtonsVisibility="Commit,Cancel,Edit"
                                   Margin="0,12,0,0"                                       
                                   CurrentItem="{Binding Path=CurrentPhysicalQuantity}" 
                                   CancelButtonContent="Cancel" 
                                   CommitButtonContent="Commit"
                                   >
                    <dataform:DataForm.EditTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <dataform:DataField Label="Physical Quantity term:">
                                    <TextBox Text="{Binding Path=Term, Mode=TwoWay}" />
                                </dataform:DataField>
                                <dataform:DataField Label="Base unit">
                                    <StackPanel>
                                        <riaControls:DomainDataSource AutoLoad="True" Height="0" Name="baseUnitsDataSource" QueryName="GetBaseUnitsOrdered" Width="0">
                                            <riaControls:DomainDataSource.DomainContext>
                                                <myService:DomainDomainContext/>
                                            </riaControls:DomainDataSource.DomainContext>
                                        </riaControls:DomainDataSource>                                          
                                        <myControl:ComboBox 
                                                  ItemsSource="{Binding ElementName=baseUnitsDataSource, Path=Data}" 
                                                  SelectedValuePath="IDUnit" 
                                                  DisplayMemberPath="Term"                                                       
                                                  SelectedValue="{Binding Path=IDUnit, Mode=TwoWay}"                                                         
                                                  >
                                            <ComboBox.ItemsPanel>
                                                <ItemsPanelTemplate>
                                                    <VirtualizingStackPanel />
                                                </ItemsPanelTemplate>
                                            </ComboBox.ItemsPanel>
                                        </myControl:ComboBox>
                                    </StackPanel>                                        
                                </dataform:DataField>            
                            </StackPanel>
                        </DataTemplate>
                    </dataform:DataForm.EditTemplate>
                </dataform:DataForm>
                <StackPanel 
                    Orientation="Horizontal" 
                    HorizontalAlignment="Right" 
                    Margin="0,12,0,0">
                    <Button 
                        Content="Save" 
                        x:Name="SaveChangesButton" 
                        Width="100" 
                        Height="23" 
                        Margin="4,0,4,0" 
                        Command="{Binding SaveCommand}" />
                </StackPanel>

            </StackPanel>

所以,我将 MVVM 与 RIA 一起使用。对于数据网格,我使用 MVVM,对于 ComboBox 数据上下文,我使用 RIA。这是填充 ComboBox 并将 DataGrid 值与 ComboBox 值绑定的唯一方法,但是方式错误!当我在数据表单中单击编辑时,我总是将 ComboBox 初始化为第一项。当然,数据网格中的值得到相同的值(错误!)。

我做错了什么?

谢谢!

PS 我忘了提到我有两个表,PhysicalQuantity 和 Unit,其中 PhysicalQuantity 有一个或零个单位(BaseUnit)。

  • 幸运的
4

1 回答 1

0

您使用了错误的组合框。

Kyle McClellan 有一个功能更强大的 ComboBox,老实说,它现在应该已经与工具包一起推出了 2 次,但工具包支持似乎也有一些问题。请在此处阅读更多信息:http: //blogs.msdn.com/b/kylemc/archive/2010/06/18/combobox-sample-for-ria-services.aspx

于 2011-11-16T20:38:41.510 回答