单元格中带有按钮的 Xamarin Telerik 列表视图 - 按钮的单击事件不会触发



我正在使用Telerik radlistview组件构建Xamarin表单页面。ListView的Itemtapped事件可以正常工作,但是当我在ListViewTemplatecell.view中添加一个按钮时,该按钮的单击事件不会触发。

xaml:

<telerikDataControls:RadListView x:Name="listView" ItemsSource="{Binding ListSource, Mode=TwoWay}" SelectionMode="Single"  ItemTapped="List_Tapped">
                <telerikDataControls:RadListView.ItemTemplate>
                    <DataTemplate>
                        <telerikListView:ListViewTemplateCell>
                            <telerikListView:ListViewTemplateCell.View>
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="2*" />
                                    </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>
                                    <Label Margin="10" Text="{Binding itemName}" Grid.Row="0" Grid.Column="0" />
                                    <Button Text="Button" BackgroundColor="Blue" Clicked="Button_Clicked" Grid.Row="0" Grid.Column="1" Margin="0,0,30,0" HorizontalOptions="EndAndExpand" VerticalOptions="Center" />
                                </Grid>
                            </telerikListView:ListViewTemplateCell.View>
                        </telerikListView:ListViewTemplateCell>
                    </DataTemplate>
                </telerikDataControls:RadListView.ItemTemplate>
            </telerikDataControls:RadListView>

代码背后:

private void List_Tapped(object sender, 
Telerik.XamarinForms.DataControls.ListView.ItemTapEventArgs e)
{
    Debug.WriteLine("List item tapped");
}   
private void Button_Clicked(object sender, EventArgs e)
{
    Debug.WriteLine("Button clicked");
    DisplayAlert("Alert", "Button was clicked", "OK");
}

我假设ListView的Itemtapped事件正在覆盖按钮的点击事件...任何人可以帮助我如何在这种情况下单击按钮?

我有一个与您的页面有所不同的页面,并且我在列表项目上获得了可工作的按钮。自您发布以来,可能已经对控件进行了更新和修复,也可能是我设置列表的方式的区别。(我认为自发布以来,Telerik Xamarin控件至少有3个更新)

一件快速的尝试...制作SelectionMode="None"并取下敲击的处理程序...然后查看您的按钮是否有效。如果有效,您可以在整个列表项目的网格(透明,无文本按钮或类似的内容)下进行可轻松的区域...然后将按钮放在网格中(将处于较高的Z-order)。

就我而言,我没有一个点击的处理程序。取而代之的是,我将SelectedItem双向绑定到视图模型属性...当所选项目更改时,我已通知:

        <telerikDataControls:RadListView ItemsSource="{Binding Path=SelectedItems}"
                                         SelectionMode="Single"
                                         SelectedItem="{Binding Path=SelectedItem,Mode=TwoWay}"
                                         VerticalOptions="FillAndExpand">

在我的基本视图模型中,我的基本属性设置器如下:

protected bool SetProperty<T>( ref T existing, T value, Action whenChanged = null, [CallerMemberName]string propertyName = "" )
{
  if ( EqualityComparer<T>.Default.Equals( existing, value ) ) return false;
  existing = value;
  whenChanged?.Invoke( );
  OnPropertyChanged( propertyName );
  return true;
}

请注意,设置器允许在属性实际更改时注入一种方法。

...因此,"典型"视图模型属性如下(这是项目源):

ObservableCollection<T> selectedItems;
public ObservableCollection<T> SelectedItems
{
  get { return selectedItems; }
  set { SetProperty( ref selectedItems, value ); }
}

...但是,如果我有代码在属性更改时可以执行此操作,我可以执行此操作(这是绑定到SelectedItem双向的属性):

T selectedItem;
public T SelectedItem
{
  get { return selectedItem; }
  set { SetProperty( ref selectedItem, value, MaybeSelectItem ); }
}
void MaybeSelectItem( )
{
  if ( SelectItem.CanExecute( null ) )
  {
    SelectItem.Execute( null );
  }
}

以这种方式,在我的视图模型属性中设置值类似于事件……而且在这种情况下,我可以避免使用列表项目的事件处理程序...同时仍然获得正常的选择行为...和项目上的按钮。

最新更新