【发布时间】:2014-03-04 14:59:49
【问题描述】:
我正在使用优秀的 Mvvmcross 和 Ninja Coder for Mvvmcross 来构建跨平台应用程序。对于我的 Windows 商店应用程序,我使用 Ninja coder 创建了一个视图和一个视图模型。我还创建了一个将在视图中引用的 UserControl。因此,我还需要将相同的视图模型绑定到用户控件。我一直在尝试将用户控件的数据上下文设置为 viewmodel 的单例实例。我已经设置了用户控件的数据上下文,如下所示。
public sealed partial class SearchResultsGridViewControl : UserControl
{
private SearchresultsViewModel _viewModel;
public SearchResultsGridViewControl()
{
this.InitializeComponent();
_viewModel = Mvx.IocConstruct<SearchresultsViewModel>();
this.DataContext = _viewModel;
}
}
但是当我在主视图中引用此用户控件时,它会在 XAML 中引发错误,提示“对象引用未设置为对象的实例。无法创建 SearchResultsGridViewControl 的实例”。
这是我的视图模型:
public class SearchresultsViewModel : BaseViewModel
{
private ISearchResultsService _searchResultsService;
public SearchresultsViewModel(ISearchResultsService searchResultsService)
{
_searchResultsService = searchResultsService;
var items = _searchResultsService.DisplaySearchResults();
SchoolDetails = new ObservableCollection<School>(items);
}
private ObservableCollection<School> _schoolDetails;
public ObservableCollection<School> SchoolDetails
{
get { return _schoolDetails; }
set
{
_schoolDetails = value;
RaisePropertyChanged(() => SchoolDetails);
}
}
public ICommand RefineCommand
{
get
{
refineCommand = refineCommand ?? new MvxCommand(FilterSearchResultsBasedOnRefine);
return refineCommand;
}
}
public void FilterSearchResultsBasedOnRefine()
{
SchoolDetails = new ObservableCollection<School>(_searchResultsService.FilterSchoolsBasedOnRefine(MidDayMeals, PlayGround, DigitalClassroom, DayBoarding, TransportationFacility));
}
}
第一次加载时,我的用户控件中的网格视图会被填充。但是,当调用 RefineCommand 从主视图更新集合时,用户控件中的网格视图没有得到更新。我猜是因为之前在将用户控件的数据上下文设置为视图模型时出现的错误。请让我知道可能出了什么问题。这几天我一直在苦苦思索。
【问题讨论】:
标签: mvvm windows-8 windows-runtime windows-store-apps mvvmcross