正确单击数据网格中的按钮时,Telerik RadGridView 选定项绑定不起作用

Posted

技术标签:

【中文标题】正确单击数据网格中的按钮时,Telerik RadGridView 选定项绑定不起作用【英文标题】:Telerik RadGridView selected item binding not working when clicking on button in datagrid properly 【发布时间】:2017-11-09 21:28:15 【问题描述】:

您好,我有一个 Telerik RadGridView 通过 MVVM 绑定到一个可观察的集合,并且网格的 SelectedItem 属性也绑定到模型内的一个属性。然后有一个按钮栏,绑定打开被选中的项目,可以看到被选中项目的更多细节。代码如下。

           <telerik:RadGridView Name="RadGridView"
                         Height="900"
                         AutoGenerateColumns="False"
                         CanUserSortColumns="True"
                         IsReadOnly="True"
                         ItemsSource="Binding Model.Items"
                         SelectedItem="Binding Model.SelectedItem,Mode=TwoWay"
                         Width="990">
            <telerik:RadGridView.Columns>


                <telerik:GridViewColumn Header="Open Item" >
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="Open"
                                Command="Binding Path=DataContext.OpenItemBySelectedItemCommand,
                                RelativeSource= RelativeSource FindAncestor,
                                AncestorType=x:Type telerik:RadGridView">
                            </Button>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                </telerik:GridViewColumn>


                <telerik:GridViewDataColumn DataMemberBinding="Binding DateScanned" Header="Date Scanned"  />
                <telerik:GridViewDataColumn DataMemberBinding="Binding Amount" Header="Amount"  />
                <telerik:GridViewDataColumn DataMemberBinding="Binding Description" Header="Description"  />
                <telerik:GridViewDataColumn DataMemberBinding="Binding IsRefund" Header="Is Refund"  />

            </telerik:RadGridView.Columns>
        </telerik:RadGridView>

现在,只要我单击该行然后单击按钮,此代码就可以正常工作,但是如果我只单击该行的按钮而不先单击该行,则未设置 SelectedItem 属性,因此该命令不起作用正如预期的那样。

我认为当单击某一行的按钮时,它会自动选择该行,但显然不是。有谁知道我如何设置SelectedItem 属性,只要我只单击特定行中的按钮而不必在单击按钮之前单击该行?

【问题讨论】:

看看这里:***.com/questions/1168976/… 该链接中的 MVVM 解决方案似乎破坏了我的命令的绑定,但我想尝试一下,看看我是否可以对其进行排序。谢谢 【参考方案1】:

您可以将底层数据对象的引用作为命令参数传递给命令:

<Button Content="Open"
        Command="Binding Path=DataContext.OpenItemBySelectedItemCommand, RelativeSource= RelativeSource FindAncestor, AncestorType=x:Type telerik:RadGridView"
        CommandParameter="Binding">
</Button>

要在您单击Button 时实际选中该行,您必须编写一些实际选中该行的代码。您可以通过像这样处理ButtonClick 事件来做到这一点:

private void Button_Click_1(object sender, RoutedEventArgs e)

    Button button = sender as Button;
    RadGridView.SelectedItem = button.DataContext;


<Button Content="Open"
        Click="Button_Click_1"
        Command="Binding Path=DataContext.OpenItemBySelectedItemCommand,
        RelativeSource= RelativeSource FindAncestor,
        AncestorType=x:Type telerik:RadGridView">
</Button>

不会破坏 MVVM 模式,因为在视图中选择一行是纯视图功能。

【讨论】:

以上是关于正确单击数据网格中的按钮时,Telerik RadGridView 选定项绑定不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Telerik MVC 网格分页错误

在编辑期间设置 Telerik MVC 网格列属性

Telerik radGridView添加childrow

从 javascript 访问 Telerik RadGrid 编辑模式

如何将 webmethod 与 Telerik 批量编辑网格一起使用

Telerik rad 日期选择器在用户键入未来日期时显示错误消息