Xamarin.Forms日志更改为绑定数据



用于测试和学习的我创建了一个Xamarin.forms应用程序,该应用程序包含一个绑定到SQLITE数据库的listView。XAML是这样的:

        <ListView>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout>
                            <Label Text="{Binding name}" />
                            <Switch IsToggled="{Binding switchState}" />
                         </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

CodeBehind将ListView.itemssource绑定到Database.getItemSasync((的项目列表。

模型很简单:

public class Item
{
    [PrimaryKey, AutoIncrement]
    public int id { get; set; }
    public string name { get; set; }
    public bool switchState { get; set; }
}

我想每次用户更改交换机时将时间戳记录到其他表。我该如何连接到绑定以实现这一目标?

陷阱1:SwitchState列也可以由业务逻辑的其他部分写入。但是在这种情况下,我不希望这些更改记录。这就是为什么我不能在模型中使用简单的设置例程,因为这始终会记录。

陷阱2:通过数据库绑定对基础数据库的任何更改也确实传播到视图,对吗?像在#1中一样,视图中出现的变化是不需要记录的基础数据库的更改。

我该如何完成?

交换机具有Toggled事件,因此在您的CodeBehind中您可以创建这样的方法:

private void HandleSwitchToggled(object sender, ToggledEventArgs e)
{
    // log the timestamp to your database
}

然后在您的XAML中,

<Switch IsToggled="{Binding switchState}"
        Toggled="HandleSwitchToggled" />

为了更新数据库和视图更新,视图不绑定到数据库,而是绑定到从数据库调用返回的List<Item>。因此,如果要更新视图,则需要直接更新List<Item>(并且在必要时也更新数据库,尽管更新数据库不会影响视图(。

在旁注上,您不应将ListView绑定到代码范围内的List<item>;您应该在视图模型中这样做。

相关内容

  • 没有找到相关文章

最新更新