我在 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/