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

时间:2017-06-08 08:55:04

标签: wpf xaml mvvm telerik radgridview

您好我有一个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属性?

1 个答案:

答案 0 :(得分:2)

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

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

要在单击Button时实际选择该行,您必须编写一些实际选择它的代码。您可以通过处理Button的{​​{1}}事件来执行此操作:

Click
private void Button_Click_1(object sender, RoutedEventArgs e)
{
    Button button = sender as Button;
    RadGridView.SelectedItem = button.DataContext;
}

这样做打破MVVM模式,因为在视图中选择一行是纯视图功能。