ReactiveUI:视图不包含“ WhenActivated”的定义

时间:2019-03-31 01:27:36

标签: reactiveui

在View构造函数的'MachineLayoutView' does not contain a definition for 'WhenActivated' and the best extension method overload 'ViewForMixins.WhenActivated(ISupportsActivation, Func<IEnumerable<IDisposable>>)' requires a receiver of type 'ISupportsActivation'行上出现以下错误this.WhenActivated

据我所知,我正确地遵循了Getting Started

注意:我使用的是WPF,我的ViewModels位于Views Project引用的单独的程序集/项目中。 (不确定是否重要)

查看

using RAL.RealTime.ViewModel;
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace RAL.RealTime
{
    /// <summary>
    /// Interaction logic for MachineLayoutView.xaml
    /// </summary>
    public partial class MachineLayoutView : ReactiveUserControl<MachineLayoutViewModel>
    {
        public MachineLayoutView()
        {
            InitializeComponent();

            this.WhenActivated(disposableRegistration =>
            {
                this.OneWayBind(this.ViewModel,
                                    viewModel => viewModel.MachineStatuses,
                                    view => view.MachineStatuses)
                                    .DisposeWith(disposableRegistration);
            });
        }
    }
}

ViewModel

using RAL.Repository;
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.Text;

namespace RAL.RealTime.ViewModel
{
    public class MachineLayoutViewModel : ReactiveObject
    {
        private ObservableAsPropertyHelper<IEnumerable<MachineStatusViewModel>> _machineStatuses { get; set; }
        public IEnumerable<MachineStatusViewModel> MachineStatuses => _machineStatuses.Value;

    }
}

编辑:

根据Glenn Watson的建议,我尝试了以下操作,没有任何改变。

public MachineLayoutView()
{
    InitializeComponent();

    this.WhenActivated(disposableRegistration =>
    {
        disposable(this.OneWayBind(ViewModel,
                            viewModel => viewModel.MachineStatuses,
                            view => view.MachineStatuses));

    });

}

1 个答案:

答案 0 :(得分:0)

这是编译时还是运行时错误?如果是编译时间。确保XAML(假设存在XAML)具有正确的名称空间,并且视图控件与中的继承类型相同。即 var case_list = (from c in sc.IncidentSet //join d in sc.ActivityPointerSet on c.Title equals d.Subject where c.CreatedOn < edatetime && c.CreatedOn >= sdatetime && (c.CaseOriginCode == null || c.CaseOriginCode.Value == 1) && c.skr_casetype != null && (c.skr_casetype.Value == 0 || c.skr_casetype.Value == 3 || c.skr_casetype.Value == 1) && (c.skr_ServiceRequest == null || c.skr_ServiceRequest.Value == 3 || c.skr_ServiceRequest.Value == 8 || c.skr_ServiceRequest.Value == 6 || c.skr_ServiceRequest.Value == 7) && c.OwningUser.Id != dp orderby c.CreatedOn descending select c).AsEnumerable().ToArray(); var regardReception = reception.Where(r => r.RegardingObjectId != null).AsEnumerable(); var regardIncident = (from c in case_list join d in regardReception on c.Id equals d.RegardingObjectId.Id // join f in sc.ActivityPointerSet on d.RegardingObjectId.Id equals f.ActivityId orderby c.skr_createdon.Value descending select c).AsEnumerable().Distinct(); foreach (var bb in regardIncident) { var appointment = (from c in sc.AppointmentSet //join f in sc.ActivityPointerSet on c.Id equals f.ActivityId where c.RegardingObjectId.Id == bb.Id select new { c.StatusCode, c.Subject, c.RegardingObjectId }).AsEnumerable().FirstOrDefault(); if (appointment == null) { var result = bb.StatusCode; if (result != null) { list.Add(bb); } } else { list.Add(bb); } ViewBag.list = list; } var regardIncidentCnt = regardIncident.Count(); ViewBag.cnt = regardIncidentCnt; } return View(); } 应该在XAML脚本中读为UserControl

从入门入手:

ReactiveUserControl