1

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

AllProducts.xaml,我有一个

  1. listbox绑定到 的属性(ProductListproductsViewModel

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

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

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

AllProducts.xaml这是绑定到ProductList属性的 xaml 代码productsViewModel

<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; }
    }
4

3 回答 3

0
    public class productsViewModel: INotifyPropertyChanged
    {
      private IEnumerable<Product> _productList;
public IEnumerable<Product> ProductList
{
    get
    {
        return _productList;
    }

    set
    {
        if (_productList!= value)
        {
            _productList= value;
            this.OnPropertyChanged("ProductList");
        }
    }
}
       ......

        public event PropertyChangedEventHandler PropertyChanged;

        protected void NotifyPropertyChanged(String info) {
            if (PropertyChanged != null) {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
于 2013-05-19T17:58:14.287 回答
0

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

RaisePropertyChanged(() => productsViewModel);

or make productsViewModel an ObservableCollection
于 2013-05-19T16:21:51.160 回答
0

使用 ObservableCollection 应该已经处理了对列表的任何更改,绑定到下面我的列表“ProductsList”的任何内容都将在 UI 中自动更新。请注意,您的 DataContext 是 MainViewModel,“ProductsList”是列表框的 ItemsSource。

    public class MainViewModel : INotifyPropertyChanged
{
    public MainViewModel()
    {
        this.ProductsList = new ObservableCollection<Products>();
    }

    public ObservableCollection<Products> ProductsList { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
于 2013-05-19T22:16:45.823 回答