在 WinUI 3 中使用可观察集合时自动更新数据库

问题描述 投票:0回答:1

我试图让我的 SQL Lite 数据库在从可观察集合中添加/更新/删除某些内容时自动更新。我有以下代码,可以在按钮功能内手动执行此操作。

我希望以一种更新数据库的方式来做到这一点,并说如果我打开另一个选项卡或另一个使用相同可观察集合的列表视图/控件也会自动更新它们的内容。

我同时使用 Entity Framework Core 和 MVVM Toolkit。

Xaml 页面:

  <Page
    x:Class="RecipeApp.Views.TestPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:RecipeApp.Views"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:models="using:RecipeApp.Models"
    xmlns:v="using:RecipeApp.ViewModels"
    mc:Ignorable="d"
    Background="Transparent">

    <Grid>
        <StackPanel Orientation="Vertical">
            <StackPanel Orientation="Horizontal">
                <TextBox x:Name="deleteUserText"></TextBox>
                <Button x:Name="deleteUserBtn" Click="DeleteUserBtn_Click">Delete</Button>
            </StackPanel>

            <ListView x:Name="MyListView"
  ItemsSource="{x:Bind Users, Mode=OneWay}">
                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="models:User">
                        <StackPanel>
                            <TextBlock Text="{x:Bind Id}"></TextBlock>
                            <TextBlock Text="{x:Bind UserName}"></TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackPanel>
    </Grid>
</Page>

页面背后的代码:

public sealed partial class TestPage : Page
{
RecipeDBContext context;

private ObservableCollection<User> _users;

public ObservableCollection<User> Users => _users;
public TestPage()
{
    this.InitializeComponent();
    context = new RecipeDBContext();
    List<User> users = new List<User>();
    _users = new ObservableCollection<User>(context.User.ToList());
}

private void DeleteUserBtn_Click(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Total users: " + Users.Count);
    Debug.WriteLine("Text is " + deleteUserText.Text);
    if (deleteUserText.Text != String.Empty)
    {
        for (int i = Users.Count-1; i >= 0; i--)
        {
            Debug.WriteLine("I: " + i + " Username: " + Users[i].UserName);
            if (Users[i].UserName== deleteUserText.Text)
            {
                context.User.Remove(Users[i]);
                Users.RemoveAt(i);
                Debug.WriteLine("DELETED " + deleteUserText.Text);
                Debug.WriteLine("New Total users: " + Users.Count);                                
                context.SaveChanges();
            }
        }            
    }
    else
    {
        Debug.WriteLine("Textbox empty");
    }
}
}
sqlite entity-framework-core winui-3 community-toolkit-mvvm
1个回答
0
投票

正如我在评论中所说,有一个ObservableCollection.CollectionChanged事件,在添加、删除或移动项目或刷新整个列表时发生。另请参阅使用示例

© www.soinside.com 2019 - 2024. All rights reserved.