单元格中带有按钮的 Xamarin Telerik ListView - 按钮的单击事件不会触发
Posted
技术标签:
【中文标题】单元格中带有按钮的 Xamarin Telerik ListView - 按钮的单击事件不会触发【英文标题】:Xamarin Telerik ListView with Button in the cell - button's clicked event won't fire 【发布时间】:2018-03-15 22:37:36 【问题描述】:我正在构建一个带有 Telerik RadListView 组件的 Xamarin 表单页面。 listview 的 ItemTapped 事件可以正常工作,但是当我将按钮添加到 ListViewTemplateCell.View 时,Button 的 Clicked 事件不会触发。
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 事件覆盖了 Button 的 Clicked 事件...谁能帮助我在这种情况下如何使按钮可点击?
【问题讨论】:
传递命令参数值 【参考方案1】:我的页面设置与您的稍有不同,并且列表项上的按钮可以正常工作而不会出现问题。可能只是自您发布以来控件已更新和修复,或者可能是我设置列表的方式不同。 (我认为自从您发布以来,telerik xamarin 控件至少有 3 次更新)
一个快速的尝试...制作SelectionMode="None"
并取下点击的处理程序...看看您的按钮是否可以工作。如果可行,您可以在整个列表项的网格下创建一个可点击区域(透明、无文本按钮或类似的东西)......然后将按钮放在网格中(这将是更高的 z 顺序) .
在我的例子中,我没有一个item taped handler。相反,我将SelectedItem
双向绑定到视图模型属性...这样,当所选项目更改时,我会收到通知:
<telerikDataControls:RadListView ItemsSource="Binding Path=SelectedItems"
SelectionMode="Single"
SelectedItem="Binding Path=SelectedItem,Mode=TwoWay"
VerticalOptions="FillAndExpand">
在我的基础 ViewModel 中,我的基础属性设置器如下所示:
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;
请注意,setter 允许注入在属性实际更改时调用的方法。
...所以一个“典型的”视图模型属性是这样的(这是项目源):
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 );
这样,在我的视图模型属性中设置值类似于事件......在这种情况下,我可以避免使用列表项点击的事件处理程序......同时仍然获得正常的选择行为......并且项目上的按钮也是如此。
【讨论】:
以上是关于单元格中带有按钮的 Xamarin Telerik ListView - 按钮的单击事件不会触发的主要内容,如果未能解决你的问题,请参考以下文章
如何在xamarin中删除集合视图中的一个单元格和sqlite中的行的删除按钮?
解析和斯威夫特。获取 UITableView 中带有复选标记的单元格。 “不能调用参数。”
Xamarin iOS - MVVMCross:无法使用 ViewModel 中的命令连接自定义单元格中的按钮
在 Xamarin IOS 的 UITableview 中更改滑动以删除按钮高度