繁体   English   中英

获取刷过的项目并设置其 BindingContext 空白 ListView

Getting the swiped item and setting its BindingContext blanks ListView

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个运行良好的列表视图,直到我尝试通过其绑定上下文获取已刷过的项目并且它使列表视图显示为空白。 在这背后的代码中,我可以访问项目的数据,但是当我运行我的应用程序时,它会使列表视图变为空白......

列表显示


<ListView
                        x:Name="MyList"
                        Grid.Row="1"
                        HasUnevenRows="True"
                        HeightRequest="10"
                        BackgroundColor="White"
                        IsGroupingEnabled="True"
                        IsPullToRefreshEnabled="false"
                        ItemsSource="{Binding LogItems}"
                        IsRefreshing="{Binding IsBusy, Mode=OneWay}"
                        RefreshCommand="{Binding LoadLogsCommand}"
                        SeparatorVisibility="None"                        
                        >
                        <ListView.ItemTemplate>
                            <DataTemplate >
                                <ViewCell Height="70">
                                    <StackLayout Orientation="Vertical"  VerticalOptions="Start"  >

                                        <SwipeView SwipeStarted="SwipeView_SwipeStarted" x:Name="mySwipeView" >                                            

                                            <Grid>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="5"/>
                                                    <RowDefinition Height="36"/>
                                                    <RowDefinition Height="36"/>
                                                    <RowDefinition Height="60"/>                                                
                                                </Grid.RowDefinitions>

                                                <Grid.ColumnDefinitions>
                                                    <ColumnDefinition Width="100"/>
                                                    <ColumnDefinition Width="20"/>
                                                    <ColumnDefinition Width="110"/>
                                                    <ColumnDefinition Width="20"/>
                                                    <ColumnDefinition Width="100"/>
                                                    <ColumnDefinition Width="36"/>
                                                
                                                </Grid.ColumnDefinitions>
                                                
                                                <Label
                                                       Grid.Row="1"
                                                       Grid.Column="0"
                                                       VerticalOptions="Center"
                                                       FontAttributes="None"                                       
                                                       Text="{Binding  .Name}"
                                                       TextColor="Black"
                                                       Margin="0, 0,0, 0"
                                                       Padding="20,10,0,0"
                                                       FontFamily="Hiragino Sans"
                                                       FontSize="14"
                                                       HeightRequest="53"                                      
                                                  />
...
                                                </Grid>
                                            </Grid>
                                            <SwipeView.RightItems>
                                                <SwipeItems Mode="Reveal" SwipeBehaviorOnInvoked="Close" >

                                                    <SwipeItemView Invoked="OnDeleteSwipeItemInvoked" >
                                                        <StackLayout Orientation="Vertical" WidthRequest="200" BackgroundColor="Red">
                                                            <StackLayout HorizontalOptions="Start">
                                                                <Image Source="deleteIcon3.png" HeightRequest="25" WidthRequest="25" Margin="70,15,0,0" />
                                                                <Label Text=" Delete" TextColor="White" FontSize="15" HorizontalOptions="CenterAndExpand" Margin="70,0,0,0"/>
                                                            </StackLayout>
                                                        </StackLayout>
                                                    </SwipeItemView>
                                                   </SwipeItems>
                                            </SwipeView.RightItems>
                                        </SwipeView>
                                    </StackLayout>
                                </ViewCell>
                            </DataTemplate>                              
                        </ListView.ItemTemplate>

代码背后


private void SwipeView_SwipeStarted(object sender, SwipeItemView e, SwipedEventArgs f, SwipeChangingEventArgs g) //SwipeStartedEventArgs e)
        {
            // var theItem = (myLogsModel)f.SelectedItem;
           var item = sender as SwipeItem;

           var model = item.BindingContext as myLogsModel;

var x = model.Name; ...

}


请任何人都可以帮助我如何在不影响我的列表视图的情况下获取刷过的项目?

1 个回复

Xamarin.Forms SwipeView ,我们可以看到 SwipeStarted 在滑动开始时被触发。 伴随此事件的 SwipeStartedEventArgs object 具有 SwipeDirection 类型的 SwipeDirection 属性。

因此,您可以从 OnDeleteSwipeItemInvoked 方法获取当前列表视图项。

我做了一个样本,你可以看看:

<ListView ItemsSource="{Binding items}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>
                            <SwipeView>
                                <SwipeView.RightItems>
                                    <SwipeItems>
                                        <SwipeItemView Invoked="SwipeItemView_Invoked">
                                            <StackLayout
                                                BackgroundColor="Red"
                                                Orientation="Vertical"
                                                WidthRequest="200">
                                                <StackLayout HorizontalOptions="Start">
                                                    <Image
                                                        Margin="70,15,0,0"
                                                        HeightRequest="25"
                                                        Source="delete.png"
                                                        WidthRequest="25" />
                                                    <Label
                                                        Margin="70,0,0,0"
                                                        FontSize="15"
                                                        HorizontalOptions="CenterAndExpand"
                                                        Text=" Delete"
                                                        TextColor="White" />
                                                </StackLayout>
                                            </StackLayout>
                                        </SwipeItemView>
                                      
                                    </SwipeItems>
                                </SwipeView.RightItems>
                                <!--  Content  -->
                                <SwipeView.Content>
                                    <Grid
                                        BackgroundColor="LightGray"
                                        HeightRequest="60"
                                        WidthRequest="300">
                                        <Label
                                            HorizontalOptions="Center"
                                            Text="{Binding title}"
                                            VerticalOptions="Center" />
                                    </Grid>
                                </SwipeView.Content>

                            </SwipeView>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

public partial class Page4 : ContentPage
{
    public ObservableCollection<menuitem> items { get; set; }
    public Page4()
    {
        InitializeComponent();
        items = new ObservableCollection<menuitem>()
        {
            new menuitem(){title="title 1"},
            new menuitem(){title="title 2"},
            new menuitem(){title="title 3"},
            new menuitem(){title="title 4"},
            new menuitem(){title="title 5"},
            new menuitem(){title="title 6"}

        };
        this.BindingContext = this;
    }

   
    private void SwipeItemView_Invoked(object sender, EventArgs e)
    {
        SwipeItemView item = sender as SwipeItemView;
        menuitem model = item.BindingContext as menuitem;
      
    }
}

public class menuitem
{
    public string title { get; set; }
}

正如 Jason 所说,我们也建议你可以使用 ListView 上下文菜单来做,不需要使用 SwipView。 Select 一项并长按以获取上下文菜单,如下图所示。

在此处输入图像描述

 <ListView ItemsSource="{Binding items}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <ViewCell.ContextActions>
                            <MenuItem Clicked="OnMore" Text="More" />
                            <MenuItem Clicked="OnDelete" Text="Delete" />
                        </ViewCell.ContextActions>
                        <StackLayout>
                            <Label Text="{Binding title}" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

  private void OnMore(object sender, EventArgs e)
    {
        MenuItem item = sender as MenuItem;
        menuitem model = item.BindingContext as menuitem;
    }

关于 ListView 交互性,请看:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/listview/interactivity

1 基于bindingcontext删除ListView项

我创建了一个从SQLite DB填充的列表视图。 XML看起来像这样: 我已经创建了一个按钮,如果单击该按钮,我想从中删除该项目。 我已经制作了一个从数据库中删除的方法,它接收一个给定的对象。 不幸的是,我不知道如何从bindingcontext中获取对象,以便我可以删除 ...

2 Xamarin Forms:动态创建Listview项-> BindingContext问题

正如我在Stackoverflow上的另一篇文章中已经描述的那样,我试图获得一种不同的布局(一个框架跨越多个listview项)。 现在,我决定尝试以下方法:我的ViewModel是一个列表列表(就像一个分组的列表视图一样)。 但是,我没有使用分组的列表视图,而是有一个普通的ListView ...

3 如何从方法获取数据并将其放入ListView?

我有这个课: 该类具有返回一个“书签”对象的“ getBookmark”方法,它包含字段“ titles”,“ urls”和“ icons”。 我如何在主班上获得这些字段? 我想创建一个带有“标题”项的ListView并访问WebView中的相应URL。 在我的主班我有这个Li ...

2012-10-26 02:50:40 1 160   android
4 如何获取ListView项上设置的文本

我想做什么我在ListView中有几个项目。 长按一个项目时,我会弹出一个上下文菜单,其中包含多个选项。 这些选项中的一个是“共享任务”。 当用户选择“共享任务”时,我想让他们长按的项目标题/文本被检索并传递给方法。 到目前为止,我已经完成了什么工作,已经设法使用以下所示的方法在li ...

5 从资产获取SVG图像并将其设置为自定义listview适配器Android

我正在一个项目中,我必须在列表视图适配器中设置svg图像。 Listview适配器是自定义的,我已经从列表中的Assets文件夹中获取了所有图像,但是不知道如何在listview适配器中设置这些svg图像或在imageview中设置..谁能帮忙,请帮助我进行整理。 ...

2016-06-27 18:04:29 1 348   android
8 BaasBox:如何获取存储在我的Baasbox仪表板中的文档并将其设置在我的应用程序的ListView中

我是一个新用户baasbox,现在,我有一些问题,我如何获得存储在我的仪表板中的一个文档并在我的应用程序中的ListView中设置它们,我已经阅读了BaasBox的文档,但是没有有一个完整的代码,我基于我的应用程序,我已经创建并从我的应用程序保存文件到我的BaasBox,但我不能反过来。 ...

10 从 python 获取值并将其添加到 ListView

我的目标是拥有一个可以从请求中添加项目的 ListView,因此我首先创建了一个向其中添加内容的按钮。 我正在使用 findChild function 来定位 listView 并因此定位 append 的东西,但错误:'PySide2.QtCore.QObject' ZA8CFDE6331BD ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM