【问题标题】:How to process CollectionView On SelectedItem event in ViewModel Code instead of Back-end Code of Content Page? Xamarin.Form如何在 ViewModel 代码而不是内容页面的后端代码中处理 CollectionView On SelectedItem 事件? Xamarin.Form
【发布时间】:2021-10-31 13:08:27
【问题描述】:

我想从 CollectionView 中的 SelectedItem 获取数据,但这样做我必须使用看起来位于内容页面后端代码中的 SelectionChanged_EventHandler(object sender, SelectionChangedEventArgs e)。我想在我的 ViewModel 代码中处理这项工作,因为我必须将数据从 SelectedItem 传递到 ViewModel 代码中的 ObservableCollection。

有什么方法可以让我从 CollectionView 中的 SelectedItem 获取数据并在我的 ViewModel 代码中处理此事件?

【问题讨论】:

  • 使用SelectionChangedCommand
  • @Jason 我以前试过。它工作正常,但我不知道如何访问选定的项目数据。我只知道如何将它用作执行功能的命令。

标签: c# xamarin.forms content-pages


【解决方案1】:

是的!有几种方法可以做到这一点:

1)使用SelectedItem Bindeable属性触发事件

XAML:

<CollectionView
            SelectedItem="{Binding SelectedItem}" ..../>

视图模型:

public Item SelectedItem
        {
            get { return _selectedItem; }
            set
            {
                if (value == _selectedItem)
                    return;

                _selectedItem = value;
                TriggerMethodThatYouWant();
                OnPropertyChanged(nameof(BackgroundTest));
            }
        }

2) 使用 TapGestureRecognizer:这将触发 On Tapping,与选择不同但实现相同

Xaml:

<CollectionView
                ItemsSource="{Binding Items}">
                <CollectionView.ItemTemplate>
                    <DataTemplate>
                        <StackLayout>
                            <StackLayout.GestureRecognizers>
                                <TapGestureRecognizer Command="{Binding tapCommand}" CommandParameter="{Binding .}"/>
                            </StackLayout.GestureRecognizers>
                      </DataTemplate>
                 </CollectionView.ItemTemplate>
<CollectionView>

Viewmodel:您必须创建命令和方法

    public Command<Item> tapCommand { get; }

【讨论】:

  • 您好先生,我想知道您是否可以帮我解决另一个问题。我有一个 CollectionView>Grid,里面有 2 个 Frame 和 1 个 ScrollView。 ScrollView 内部有 1 Frame 1 Label,但问题是我的 ScrollView 大部分时间都无法滚动。它不能正确滚动。这里是根 CollectionView>Grid>ScrollView>Frame>Label。你知道是什么问题吗?
  • CollectionView 是一个可滚动的视图,而您在内部使用的是另一个可滚动的视图。我认为这是问题
  • 您能告诉我该怎么做吗?因为我想在 CollectionView 中有一个固定高度的小显示器来显示我可以滚动的其他数据。
  • 也许您可以保持主 UI 简单,然后在单击时添加行为。显示包含更多信息的弹出窗口或其他页面
猜你喜欢
  • 2010-10-29
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多