如何查看模型绑定到一个MVVMCROSS用户控件?(How to bind view model t

2019-10-19 11:16发布

我使用的是优秀的Mvvmcross和忍者编码器,用于Mvvmcross建立一个跨平台的应用程序。 对于我的Windows商店应用我创建了一个视图,并使用忍者编码器视图模型。 我也创建将在视图中引用的用户控件。 因此,我需要绑定同一个视图模型到用户控件也。 我一直在试图设置用户控制视图模型的单一实例的数据上下文。 我已经设置像下面的用户控件的数据上下文。

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被称为更新从主视图集合,在用户控件网格视图不会得到更新。 而且我在设置用户控制视图模型的数据上下文猜测的,因为错误早些时候。 请让我知道什么可以去错了。 我一直在敲打我的脑袋一下好几天。

Answer 1:

我一直在使用MVVMCross与Windows应用商店最近相当。 如果没有我的代码回头看,我敢肯定,在DataContext将继承它的父除非覆盖。

所以,只要你已经提出的MvxPage有一个视图模型,您添加到它,无论是在XAML或代码隐藏任何用户控制,应该共享相同的数据上下文。 如果你正在寻找做一些MVVMCross数据绑定从用户控件,你应该确保你的用户控件实现IMvxStoreView,并确保视图模型属性设置为DataContext的价值。

希望帮助。

欢呼声中,特里斯坦



Answer 2:

我想你的第一个问题“对象引用不设置到对象的实例”,是设计时唯一的问题-因为你试图设置使用视图模型Mvx. 在设计时。 你可以,如果你想使用设计时间的ViewModels并且还可能通过设计时的一个助手,解决这个问题(见https://github.com/MvvmCross/MvvmCross/blob/v3.1/CrossCore/Cirrious.CrossCore .Wpf /平台/ MvxDesignTimeHelper.cs )。


我不知道你的第二个问题是什么“在我的用户网格视图是越来越加载时的第一次。但是,当RefineCommand被称为更新从主视图集合,在用户控件网格视图是没有得到填充更新” -这听起来像是无论是在XAML中或在返回结果的问题FilterSearchResultsBasedOnRefine 。 从细节的当前水平,我看不出它是什么。 我的“直觉”是,这个问题不会MvvmCross具体 - 这将只是一个普通的MVVM /数据绑定问题。



文章来源: How to bind view model to a UserControl in MVVMCROSS?