DataForm中的ComboBox,SL4

时间:2011-06-19 09:22:24

标签: silverlight-4.0 datagrid combobox dataform

我知道这个问题是你们许多人已经发布的,但我仍然遇到了问题。这个想法很简单:我有一个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初始化为第一个项目。当然,数据网格中的值得到相同的值(错误!)。

我做错了什么?

谢谢!

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

  • 幸运

1 个答案:

答案 0 :(得分:0)

您使用的是 错误的 ComboBox。

Kyle McClellan拥有功能更强大的ComboBox,到目前为止应该已经使用该工具包推出了2次,但似乎还有一些工具包支持可疑。请在这里阅读更多相关信息: http://blogs.msdn.com/b/kylemc/archive/2010/06/18/combobox-sample-for-ria-services.aspx