【问题标题】:Silverlight nested RadGridView SelectedItem DataContextSilverlight 嵌套 RadGridView SelectedItem DataContext
【发布时间】:2011-02-17 13:09:42
【问题描述】:

我正在开发 Silverlight 4 应用程序并使用 2010 Q1 版本 1 RadGridView。我正在使用 MVVM 模式开发这个应用程序,并试图将我的代码隐藏降至最低。

在我的视图上,我有一个 RadGridView,它绑定到我的 ViewModel 上的一个属性。我正在通过SelectedItem 设置属性。我有一个嵌套的 RadGridView,我想将我的 ViewModel 上的属性设置为SelectedItem,但我不能。我认为我的嵌套网格的 DataContext 是父绑定集合中的元素,而不是我的 ViewModel。我可以轻松地使用代码隐藏从嵌套网格上的SelectionChanged 事件中设置我的 ViewModel 属性,但我不想这样做。我试图在嵌套网格的 ElementName 中使用我的 viewModelName 来指定对于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> 

【问题讨论】:

    标签: silverlight gridview datacontext selecteditem


    【解决方案1】:

    如果您的 VM 上的“SelectedEntityDetail”道具与“SelectedEntityClass”处于同一级别,那么您似乎走在了正确的轨道上

    尝试在与“主”网格或树“LayoutRoot”等中的“主”网格相同的级别进行绑定。因为我只猜测 requestView 是什么。

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

    【讨论】:

    • 是的,“SelectedEntityDetail”和“SelectedEntityClass”在我的虚拟机中处于同一级别。 “requestView”是我的 View 的 xName,所以我试图将 ElementName 设置为 View 的根目录,这样我就可以访问原始 View DataContext。据我所知,这种语法在 WPF 中有效,但我似乎无法在 Silverlight 中得到它。按照您的建议绑定到 master 也不起作用。
    【解决方案2】:

    已与 Telerik 支持人员联系,他们告诉我这是一个框架限制。他们建议使用附加行为的解决方法。到目前为止,我一直坚持使用一小段代码隐藏

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多