【问题标题】:Updating a ObservableCollection on another Site/Update Button在另一个站点/更新按钮上更新 ObservableCollection
【发布时间】:2017-05-31 20:19:43
【问题描述】:

我正在使用 SQLite 开发 UWP 应用程序,我遇到了一个问题,我需要一些帮助 - 因为现在我刚刚找到了一个糟糕的解决方案。

我有一组电影,它们以string FavMoviesIdString 的形式保存在我的数据库中(每个最喜欢的电影ID 都被添加到字符串中并由";" 分割 - 因为您无法保存整个 MoviesModels 列表) 用户可以通过不同站点(站点 B)上的 FavMoviesCollection 来查看这些电影。

方法LoadMovies 获取这些电影并将它们显示在FilteredMoviesList 中。 (它绑定到 ListView Mode=OneWay

如果用户第一次打开站点 B,则在构造函数中调用 LoadMovies 方法并显示所有电影,但是,用户可以从站点 A 将电影添加到他们的收藏夹在访问站点 B 之后。问题:在站点 A 上添加电影后,列表不会更新。

打开应用程序 -> 转到站点 A 并将电影添加到收藏夹 -> 转到站点 B - 显示电影 -> 返回站点 A 并添加另一部电影 -> 返回站点 B 并且只有第一个显示电影。

“我该怎么做,如果添加了另一个项目,列表会更新” “我该怎么做才能重新初始化我的构造函数?” “我应该实现一个更新按钮来手动加载电影吗?”

public ObservableCollection <MovieModels> FilteredMoviesList
    {
        get { return _filteredMoviesList;}
        set 
        {
            _filteredMoviesList = value;
            RaisePropertyChanged("FilteredMoviesList")
        }
    }

    public void LoadMovies()
    {
        using(var db = new DataBaseContext())
        {
            ObservableCollection<MovieModel> movies = new ObservableCollection<MovieModel>();
            movies = DatabaseModel.GetSampleFavMovies();
            FilteredMoviesList = movies;
        }
    }

编辑:现在有效的方法:

在导航到另一个页面时,我调用 LoadMovies 方法 - 所以只有在离开站点后更新列表,这很糟糕。

【问题讨论】:

    标签: c# sqlite mvvm uwp


    【解决方案1】:

    您的案例是何时在 MVVM 中使用消息传递的一个很好的例子。

    当用户从站点 A 将电影添加到他们的收藏夹时,您应该发送一条消息。 B 应该注册此消息并执行自己的操作。

    您可以使用发布/订阅模式的使用消息传递。为此,您不必实施它。您可以使用多个实现 is 的 MVVM 库。

    例如,您可以使用 MVVM Light:

    ViewModelBase 继承您的 ViewModel,然后您就有一个 MessengerInstance 可用于发送和注册消息。

    您在 AViewModel 中的代码(当用户将电影添加到他们的收藏夹时):

    MessengerInstance.Send(new FavouritesListChangedNotification());
    

    您在 BViewModel 中的代码(在构造函数中):

    MessengerInstance.Register<FavouritesListChangedNotification>(this, scn => {/* here imlement you action when in site A the list of favorites changed*/});
    

    FavouritesListChangedNotification 是您自己的类,可以包含其他信息,例如电影列表。

    这样可以避免 ViewModel 之间存在直接引用,这会导致 ViewModel 松散耦合,从而更容易维护客户端代码。

    【讨论】:

    • 非常感谢!这正是正在寻找的东西!
    猜你喜欢
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 2014-01-18
    相关资源
    最近更新 更多