Xamarin中如何不重载ContentPage即可隐藏DataTemplate内触发Tapped的控件
解决方案
你有两种可行的实现方式,按需选择即可:
方案1:直接操作触发事件的控件(最快实现)
触发Tapped事件的sender参数本身就是你点击的那个Frame控件,直接强转后修改属性即可,不需要额外查找控件:
private void follower_Tapped(object sender, EventArgs e) { if (sender is Frame followerFrame) { followerFrame.IsVisible = false; } }
这个方式不会重新加载页面,点击后对应Frame会立即隐藏。
方案2:通过MVVM绑定修改数据源(更适合长期维护)
如果需要同步修改数据源状态,推荐走绑定逻辑,不需要操作UI控件:
- 首先确保你列表绑定的集合的元素Model实现了
INotifyPropertyChanged接口,Follow属性变更时可以通知UI更新:
public class FeedItemModel : INotifyPropertyChanged { private bool _follow; public bool Follow { get => _follow; set { _follow = value; OnPropertyChanged(); } } // 其他业务属性省略 public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
- 事件中修改对应Model的Follow属性即可:
private void follower_Tapped(object sender, EventArgs e) { if (sender is BindableObject bindable && bindable.BindingContext is FeedItemModel item) { item.Follow = false; } }
注意事项
DataTemplate内定义的x:Name仅在模板内部的命名范围有效,页面后台代码无法直接通过x:Name访问模板生成的控件,所以不要尝试用FindName等方式查找对应Frame。
内容的提问来源于stack exchange,提问作者Chim Di Tru
相关产品推荐
相关产品推荐

