Silverlight вложенный RadGridView SelectedItem DataContext - PullRequest
1 голос
/ 10 мая 2010

Я занимаюсь разработкой приложения Silverlight 4 и использую RadGridView 1-го выпуска 2010 года. Я разрабатываю это приложение с использованием шаблона MVVM и стараюсь свести к минимуму мой код.

В моем View у меня есть RadGridView, и это привязывается к свойству в моей ViewModel. Я устанавливаю свойство через SelectedItem. У меня есть вложенный RadGridView, и я хочу установить свойство на моей ViewModel на SelectedItem, но я не могу. Я думаю, что DataContext моей вложенной сетки - это элемент в связанной коллекции родителя, а не моя ViewModel. Я могу легко использовать codebehind для установки моего свойства ViewModel из события SelectionChanged во вложенной сетке, но я бы предпочел этого не делать. Я попытался использовать свое viewModelName в ElementName в моей вложенной сетке, чтобы указать, что для SelectedItem ViewModel - это DataContext, но я не могу заставить это работать. Есть идеи?

Вот мой Xaml:

<grid:RadGridView  
                    x:Name="master" 
                    ItemsSource="{Binding EntityClassList, Mode=TwoWay}" 
                    SelectedItem="{Binding SelectedEntityClass, Mode=TwoWay}" 
                    AutoGenerateColumns="False" 
                    > 

                <grid:RadGridView.Columns> 
                    <grid:GridViewSelectColumn></grid:GridViewSelectColumn> 
                    <grid:GridViewDataColumn DataMemberBinding="{Binding Description}" Header="Description"/. 
                </grid:RadGridView.Columns> 

                <grid:RadGridView.RowDetailsTemplate> 
                    <DataTemplate> 
                        <grid:RadGridView 
                            x:Name="child" 
                            ItemsSource="{Binding EntityDetails, Mode=TwoWay}" 
                          /* Note: SelectedItem here is not setting my property in my ViewModel*/
                            SelectedItem="{Binding DataContext.SelectedEntityDetail, ElementName='RequestView', Mode=TwoWay}" 
                            AutoGenerateColumns="False" 
                            > 
                                <grid:RadGridView.Columns> 
                                    <grid:GridViewSelectColumn></grid:GridViewSelectColumn> 
                                    <grid:GridViewDataColumn DataMemberBinding="{Binding ServiceItem}" Header="Service Item" /> 
                                    <grid:GridViewDataColumn DataMemberBinding="{Binding Comment}" Header="Comments" /> 
                                </grid:RadGridView.Columns> 
                        </grid:RadGridView> 
                    </DataTemplate> 
                </grid:RadGridView.RowDetailsTemplate> 

            </grid:RadGridView> 

Ответы [ 2 ]

0 голосов
/ 24 мая 2010

Свяжитесь со службой поддержки Telerik, и они говорят мне, что это ограничение структуры. Они предложили обходной путь, используя прикрепленное поведение. До сих пор я застрял с небольшой частью кода позади

0 голосов
/ 10 мая 2010

Похоже, что вы на правильном пути, если ваша опора "SelectedEntityDetail" на вашей виртуальной машине находится на том же уровне, что и "SelectedEntityClass"

Попробуйте связать на том же уровне, что и "основная" сетка или что-то выше в дереве "LayoutRoot" и т. Д., Так как я только догадываюсь, что такое requestView.

SelectedItem = "{Binding ElementName = master, Path = DataContext.SelectedEntityDetail}"

...