正确单击数据网格中的按钮时,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
时实际选中该行,您必须编写一些实际选中该行的代码。您可以通过像这样处理Button
的Click
事件来做到这一点:
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 选定项绑定不起作用的主要内容,如果未能解决你的问题,请参考以下文章
从 javascript 访问 Telerik RadGrid 编辑模式