我在WP8应用程序中使用MVVM。我有一个登录页面(AllProducts.xaml
),其中显示了产品列表。在构造函数中,我有this.DataContext = productsViewModel;
在AllProducts.xaml
中,我有一个
listbox
绑定到ProductList
的属性(productsViewModel
)。
带有ADD按钮的应用栏,将用户带到AddProduct.xaml
页面。在这里,用户添加一个保存在数据库中的新产品。调用save方法后,我NavigationService.GoBack();
将用户带到上一页(AllProducts.xaml
)
但是,AllProducts.xaml
现在会显示新添加的产品。这很明显&我认为这是因为NavigationService.GoBack();
只恢复了上一页的状态而没有重新绑定它。
如何重新绑定/刷新页面以便新添加的产品显示在列表中?
以下是AllProducts.xaml
中的xaml代码,该代码绑定到ProductList
的{{1}}属性
productsViewModel
这是我的<phone:LongListSelector ItemsSource="{Binding GetProductList, Mode=TwoWay}"
Name="lls"
ItemTemplate="{StaticResource MyDataTemplateHere}"
toolkit:TiltEffect.IsTiltEnabled="True"
SelectionChanged="lls_SelectionChanged"/>
productsViewModel
这是我的ProductList类。
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));
}
}
}
答案 0 :(得分:0)
你必须让绑定知道它需要查询getter .. 所以在添加新项目后
RaisePropertyChanged(() => productsViewModel);
or make productsViewModel an ObservableCollection
答案 1 :(得分: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));
}
}
}
答案 2 :(得分: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));
}
}
}