【问题标题】:MVVM with list data on different page xamarin forms具有不同页面 xamarin 表单上的列表数据的 MVVM
【发布时间】:2017-05-20 05:14:53
【问题描述】:

我有一个对象列表,我绑定到 NavigationPage 上的 ListView

这里是视图:

        <ListView  HasUnevenRows="true" x:Name="note_list" HorizontalOptions="FillAndExpand" HeightRequest="50" ItemSelected="note_clicked">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Margin="10, 0, 0, 0" HorizontalOptions="FillAndExpand" Orientation="Vertical" VerticalOptions="Fill">
                            <StackLayout Margin="10 ,10, 10, 0" Orientation="Horizontal" HorizontalOptions="FillAndExpand">
                                <Image IsVisible="{Binding responseRequired, Mode=TwoWay}" Source="icons/blue/warning" WidthRequest="20" HorizontalOptions="Start" Margin="0, 0, 0, 0"></Image>
                                <Label HorizontalOptions="Start" Margin="0, 0, 0, 0" FontSize="18" VerticalOptions="CenterAndExpand" Text="{Binding userId , Mode=TwoWay}"></Label>
                                <Label HorizontalTextAlignment="End" VerticalOptions="Center" HorizontalOptions="EndAndExpand" TextColor="#c1c1c1" FontSize="14" Text="{Binding daysFromPost , Mode=TwoWay}"></Label>
                            </StackLayout>
                            <StackLayout HorizontalOptions="Fill" Orientation="Vertical" Margin="10, -5, 10, 10">
                                <StackLayout  HorizontalOptions="StartAndExpand" Orientation="Horizontal" Margin="0, -2, 0, 0">
                                    <Label FontSize="14" TextColor="#c1c1c1" Text="to: "></Label>
                                    <Label  HorizontalOptions="StartAndExpand" FontSize="14" TextColor="#c1c1c1" Text="{Binding noteToo, Mode=TwoWay}"></Label>
                                </StackLayout>
                                <Label FontSize="14" TextColor="Gray" Text="{Binding note, Mode=TwoWay}"></Label>
                            </StackLayout>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

想象一下,当我单击一个日志时,它会转到另一个页面,其中包含日志详细信息以及更改该日志的选项。使用 MVVM 方法将更改绑定到模型视图,我保存更改然后弹出详细信息导航页面。但是当日志列表显示备份时,在页面由于某种原因重新加载之前,这些更改是不可见的。双向绑定不应该导致将更改推送到视图吗?还是我要通过重写 OnAppering() 手动重新加载模型视图?

【问题讨论】:

  • 您能分享一下您是如何将 ListView 绑定到集合的吗?此外,显示任何对象的代码是这些单元格的 BindingContext。它将是具有 responseRequired 作为属性的类。

标签: c# mvvm xamarin xamarin.forms


【解决方案1】:

在没有看到任何其他代码的情况下,我假设一旦您将 Log 模型传递到 Log Details 页面,该模型就不再与上一页中包含的 Log 项集合相关联。

有几种方法可以解决这个问题。如果您想查看以下任何方式的代码,请告诉我。

正如您所描述的,一种最简单的方法是刷新OnAppearing() 中的日志集合。

我使用的另一种方法是MessagingCenter 订阅,您在日志收集页面的构造函数中订阅它并且永远不会取消订阅。然后,您将从“日志详细信息”页面发送一个事件,该事件将触发集合被刷新。如果有时您需要刷新集合,即使OnAppearing() 可能不会再次运行,或者您遇到 Android 将简单的页面事件拖死的问题,这也很好。 >:(

另一种方法是在某处定义static 日志集合,您的日志集合页面将绑定到该集合,然后对单个日志的任何更改都会更新该static 集合,因此static 集合无论哪个页面进行更改,都将始终是最新的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多