silverlight 4.0 - ComboBox in DataForm, SL4



我知道你们中的许多人已经发布了这个问题,但我仍然有问题。这个想法很简单:我有一个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。这是填充组合框并将DataGrid值与组合框值绑定的唯一方法,但方法错误!当我在数据表单中单击"编辑"时,我总是将ComboBox初始化为第一项。当然,数据网格中的值会得到相同的值(错误!)。

我做错了什么?

谢谢!

附言:我忘了提到我有两个表,PhysicalQuantity和Unit,其中PhysicalQuanty有一个或零个Units(BaseUnit)。

  • Lucky

您使用的组合框错误

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

相关内容

  • 没有找到相关文章

最新更新