Silverlight вложенный RadGridView SelectedItem DataContext
Я занимаюсь разработкой приложения 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 ответа
Был в контакте с поддержкой Telerik, и они говорят мне, что это ограничение структуры. Они предложили обходной путь, используя прикрепленное поведение. До сих пор я застрял с небольшим фрагментом кода
Похоже, вы находитесь на правильном пути, если ваш "SelectedEntityDetail" на вашей виртуальной машине находится на том же уровне, что и "SelectedEntityClass"
Попробуйте связать на том же уровне, что и "основная" сетка или что-то выше в дереве "LayoutRoot" и т. Д., Так как я только догадываюсь, что такое requestView.
SelectedItem = "{Binding ElementName = master, Path = DataContext.SelectedEntityDetail}"