正确单击数据网格中的按钮时,Telerik RadGridView 选定的项目绑定不起作用
Telerik RadGridView selected item binding not working when clicking on button in datagrid properly
您好,我有一个通过 MVVM 绑定到可观察集合的 telerik RadGridView,并且网格的 SelectedItem
属性 也绑定到模型中的 属性 .然后有一个按钮列,用于打开 selected 项目以查看 selected 项目的更多详细信息。代码如下。
<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
属性 不会set 等命令无法按预期运行。
我以为单击某行的按钮时它会自动 select 该行,但显然不会。有谁知道每当我只单击特定行中的按钮而无需在单击按钮之前单击该行时如何设置 SelectedItem
属性?
您可以将对基础数据对象的引用作为命令参数传递给命令:
<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 模式,因为在视图中选择一行是纯粹的视图功能。
您好,我有一个通过 MVVM 绑定到可观察集合的 telerik RadGridView,并且网格的 SelectedItem
属性 也绑定到模型中的 属性 .然后有一个按钮列,用于打开 selected 项目以查看 selected 项目的更多详细信息。代码如下。
<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
属性 不会set 等命令无法按预期运行。
我以为单击某行的按钮时它会自动 select 该行,但显然不会。有谁知道每当我只单击特定行中的按钮而无需在单击按钮之前单击该行时如何设置 SelectedItem
属性?
您可以将对基础数据对象的引用作为命令参数传递给命令:
<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 模式,因为在视图中选择一行是纯粹的视图功能。