繁体   English   中英

如何为应用程序设置单个对象实例?

[英]How to set up a single object instance for an application?

我正在为我的应用程序遵循MVVM模式,并且为了防止内存泄漏,我需要将对象实例的数量减少到一个。 然后,该对象实例应在需要时移交给其他类。

在我目前的执行情况被设立在AppVM,并传递给AdductionAbductionFlexionViewModel 但是,从做了一个搜索MyoDeviceModle()情况下,第二个实例在这里显示AdductionAbductionFlexionView

我的问题是如何建立的构造在AdductionAbductionFlexionView采取_connectedDevice那就是BEING整个应用程序使用的实例?

这是AppVM,其中显示了应使用的主要实例和唯一实例:

private MyoDeviceModel _connectedDevice;

        #endregion

        /// <summary>
        /// Initializes a new instance of the <see cref="ApplicationViewModel"/> class.
        /// </summary>
        public ApplicationViewModel()
        {
            _connectedDevice = new MyoDeviceModel();
            // Add available pages
            PageViewModels.Add(new HomeViewModel(new UserLoginModel()));
            PageViewModels.Add(new AdductionAbductionFlexionViewModel(_connectedDevice, new DatabaseModel()));


            // Set starting page
            CurrentPageViewModel = PageViewModels[0];
        }

这就是它传递给AdductionAbductionFlexionViewModel

私人MyoDeviceModel _myoDevice; 私有DatabaseModel _dataObj;

public event Action<string> DataChanged;

private string _itemString;


/// <summary>
/// Initializes a new instance of the <see cref="AdductionAbductionFlexionViewModel"/> class.
/// </summary>
/// <param name="Myodevice">The device.</param>
/// <param name="progressData">The progress data.</param>
public AdductionAbductionFlexionViewModel(MyoDeviceModel Myodevice, DatabaseModel progressData)
{

    DataSubmitCommand = new RelayCommand (this.SaveChangesToPersistence);
    CalibrationSetCommand = new RelayCommand(this.CallibratePitchMinimumCall);
    DatabaseSearchCommand = new RelayCommand(this.QueryDataFromPersistence);

    _myoDevice = Myodevice;
    _myoDevice.MyoDeviceStart();

    _dataObj = progressData;

    _myoDevice.StatusUpdated += (update) =>
    {
        CurrentStatus = update;   
    };


    _myoDevice.PoseUpdated += (update) =>
    {
        PoseStatus = update;   
    };


    _myoDevice.PainfulArcDegreeUpdated += (update) =>
    {
        PainfulArcStatus = update;
    };


    _myoDevice.DegreesUpdated += (update) =>
    {
        DegreeStatus = update;
    };

    _myoDevice.StartDegreeUpdated += (update) =>
    {
        StartDegreeStatus = update;    
    };

    _myoDevice.EndDegreeUpdated += (update) =>
    {
        EndDegreeStatus = update;    
    };


}

但是我想知道如何传递_connectedDevice实例而不是new MyoDeviceModel()

        public AdductionAbductionFlexionView()
        {
            InitializeComponent();
            this.DataContext = new AdductionAbductionFlexionViewModel(new MyoDeviceModel(), new DatabaseModel()); 
            this.Loaded += AdductionAbductionFlexionView_Loaded;
            this.Loaded -= AdductionAbductionFlexionView_Loaded;

            ((AdductionAbductionFlexionViewModel)DataContext).DataChanged += x =>
            {

                new ToastPopUp("Submit Succeeded!", "Progress data submitted succesfully", NotificationType.Information)
                {
                    Background = new LinearGradientBrush(System.Windows.Media.Color.FromRgb(0, 189, 222), System.Windows.Media.Color.FromArgb(255, 10, 13, 248), 90),
                    BorderBrush = new SolidColorBrush(System.Windows.Media.Color.FromRgb(0, 189, 222)),
                    FontColor = new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 255, 255))
                }.Show();

            };

        }

您正在将初始实例传递给另一个类的构造函数。 因此,您仅使用一个实例,而不使用两个。 如果您不想传递实例,则需要考虑实现Singleton Pattern

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM