Silverlight вложенный RadGridView SelectedItem DataContext

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

На моем View у меня есть RadGridView, и это привязывается к свойству на моей ViewModel. Я устанавливаю свойство через SelectedItem, У меня есть вложенный RadGridView, и я хочу установить свойство на моей ViewModel в SelectedItem но я не могу. Я думаю, что DataContext моей вложенной сетки - это элемент в связанной коллекции родителя, а не моя ViewModel. Я могу легко использовать codebehind для установки моего свойства ViewModel из SelectionChanged событие на вложенной сетке, но я бы предпочел не делать этого. Я пытался использовать мой viewModelName в ElementName в моей вложенной сетке, чтобы указать, что для SelectedItemViewModel - это 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 ответа

Решение

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

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

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

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

Другие вопросы по тегам