ComboBox в DataForm, SL4 - PullRequest
       24

ComboBox в DataForm, SL4

0 голосов
/ 19 июня 2011

Я знаю, что этот вопрос уже задан многими из вас, но у меня все еще есть проблема.Идея очень проста: у меня есть DataGrid, и когда я выбираю элемент в DataGrid, он должен выбрать элемент в ComboBox, который находится в DataForm.Я прочитал много постов и реализовал несколько идей в том, что я сделал, и теперь у меня есть это:

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

  • Lucky

1 Ответ

0 голосов
/ 17 ноября 2011

Вы используете неправильно ComboBox.

У Кайла Макклеллана гораздо более мощный ComboBox, который, честно говоря, уже должен был быть развернут с инструментарием 2 раза, но, похоже, что-то не так с поддержкой инструментария.Пожалуйста, прочитайте больше об этом здесь: http://blogs.msdn.com/b/kylemc/archive/2010/06/18/combobox-sample-for-ria-services.aspx

...