windows-phone-7 - 如何刷新页面上的数据上下文

标签 windows-phone-7 mvvm windows-phone-8

我在 WP8 应用程序中使用 MVVM。我有一个显示产品列表的登录页面 (AllProducts.xaml)。在构造函数中,我有 this.DataContext = productsViewModel;
AllProducts.xaml , 我有一个

  • listbox绑定(bind)到 ProductList 的属性 (productsViewModel) .
  • 带有添加按钮的应用栏,可将用户带到 AddProduct.xaml页。在这里,用户添加了一个保存在数据库中的新产品。调用 save 方法后,我有 NavigationService.GoBack();将用户带到上一页(AllProducts.xaml)

  • 但是,AllProducts.xaml现在会显示新添加的产品。这很明显,我认为这是因为 NavigationService.GoBack();它只是恢复上一页的状态而不重新绑定(bind)它。

    如何重新绑定(bind)/刷新页面以使新添加的产品显示在列表中?

    这是 AllProducts.xaml 中的 xaml 代码绑定(bind)到 ProductList productsViewModel 的属性(property)
    <phone:LongListSelector ItemsSource="{Binding GetProductList, Mode=TwoWay}"
                            Name="lls"
                            ItemTemplate="{StaticResource MyDataTemplateHere}"
                            toolkit:TiltEffect.IsTiltEnabled="True" 
                            SelectionChanged="lls_SelectionChanged"/>
    

    这是我的productsViewModel
        public class productsViewModel: INotifyPropertyChanged
        {
        private ObservableCollection<ProductList> _productList;
                public ObservableCollection<ProductList> GetProductList
                {
                    get
                    {
                        var prodList = from p in unitOfWork.ProductRepository.GetAll()
                                      join c in unitOfWork.CustomerRepository.GetAll()
                                      on p.CustId equals c.CustId
                                      select new ProductList { ProductId = p.Id, ProductName = p.ProductName, CustomerId = c.CustId};
                        _productList= new ObservableCollection<ProductList>(prodList .ToList());
                        return _productList;
                    }
                    set
                    {
                        _productList= value;
                        OnPropertyChanged("GetProductList");
                    }
                }
    
    
    public event PropertyChangedEventHandler PropertyChanged;
            protected void OnPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
        }
    

    这是我的 ProductList 类。
     public class ProductList
        {
            public int ProductId { get; set; }
            public string  ProductName { get; set; }
            public int CustomerId { get; set; }
        }
    

    最佳答案

    你必须让绑定(bind)知道它需要查询 setter/getter ..
    所以在添加新项目之后

    RaisePropertyChanged(() => productsViewModel);
    
    or make productsViewModel an ObservableCollection
    

    关于windows-phone-7 - 如何刷新页面上的数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636751/

    相关文章:

    c# - 随机不是那么随机,在 Windows Phone 7 上有随机类

    wpf - MVVM中的数据模板是否过时?

    windows-phone-7 - 启动 Windows Phone 7 Mango RC 模拟器时出错

    windows-phone-7 - Windows Phone 8 上的 Windows Phone 7 应用程序

    c# - XNA 中让玩家在屏幕上流畅绘画的最佳方法是什么?

    c# - 单击按钮时弹出

    wpf - F# WPF MVVM 我可以在不使 View 模型变量可变的情况下执行此操作吗?

    c# - 我可以检测应用程序是否正在 child 区运行吗?

    windows-phone-7 - WP7 在 SupportedOrientations ="Portrait"时检测屏幕方向变化

    windows-phone-8 - 如何在Windows Phone 8.1 XAML APP中获取区域格式设置