![](/img/trans.png)
[英]How to use single object instance for class to set the multiple member value?
[英]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.