У меня есть два класса и окно WPF. Этими классами являются ShellViewModel.cs и UnitStatusTab.cs, а окна WPF называются Shell.xaml. ShellViewModel.cs - это то место, где большинство переменных инициализированы, чтобы их можно было использовать в других классах и через проект. Shell.xaml имеет datagrid и отображает большую часть данных. Для того, чтобы получить эти данные из файлов, используемые UnitStatusTab.cs, но по какой-то причине я получаю ошибкуC# error Ссылка на объект
NullReferenceException был необработанным
Это часть коды в ShellViewModel.cs
public class ShellViewModel : INotifyPropertyChanged
{
Shell sh;
readonly Shell shell;
string PROBE_FOLDER = Config.GetDir(1);
string RAC_FOLDER = Config.GetDir(2);
string MMU_FOLDER1 = Config.GetDir(3);
string MMU_FOLDER2 = Config.GetDir(4);
public string User = "";
public string Pass = "";
public Thread initialOpen;
public Thread InputThread;
public Thread RACInputThread;
public Thread MMUThread;
public Thread ProbeThread;
public string unitStatusBaseFileName = @"unit_status_";
public string loadForecastBaseFileName = @"submitted_virtual_bids_";
public DateTime inputdate;
public bool Is_HDIC = true;
public ShellViewModel(Shell shell)
{
this.shell = shell;
IsIdle = true;
IsSchedRateCalcIdle = true;
ObsLog = new ObservableCollection<LogItem>();
ObsProbeLog = new ObservableCollection<LogItem>();
//obsDate = (DateTime.Now.Date).AddDays(1.0); // Commented this out so that current day date will be listed
obsDate = DateTime.Now.Date;
ObsRawDate = DateTime.Now.AddDays(-2);
obsScen = "1";
ObsProbeFolder = PROBE_FOLDER;
ObsInputFolder = Path.Combine(Path.Combine(RAC_FOLDER, ObsDate.ToString("yyyyMMdd")),Path.Combine("AC2", "Probe Input_CTO"));
ObsInputFolderRAC = Path.Combine(Path.Combine(RAC_FOLDER, inputdate.ToString("yyyyMMdd")), Path.Combine("AC2", "Probe Input_t"));
ObsOutputFolder = Path.Combine(Path.Combine(RAC_FOLDER, ObsDate.ToString("yyyyMMdd")), Path.Combine("AC2", "Probe Output_CTO"));
ProbeXmlFactory factory = new ProbeXmlFactory();
//ObsProbeOptions = new ObservableCollection<ProbeOption>(factory.CreateProbeOptions(Path.Combine(PROBE_FOLDER, "ProbeRAC_AM.xml")));
ProbeInputEngine.Current.LogEvent += s => Log(s);
}
}
Это мой код в UnitStatusTab.cs
public class UnitStatusTab
{
ShellViewModel shellVM;
Shell shell;
public void GetUnitStatusData()
{
this.shellVM = shellVM;
for (int i = 1; i <= 24; i++)
{
obsStartHours.Add(i);
obsEndHours.Add(i);
}
ObsUnitStatuses = new List<string>() { "A", "P", "M", "U", "*" };
ObsStartHour = 1;
ObsEndHour = 1;
ObsSelectedStatus = "A";
//ObsSelectedUnit = ObsUnits.FirstOrDefault();
string filePath;
filePath = System.IO.Path.Combine(shellVM.ObsInputFolder, @"unit_status_" + shellVM.ObsDate.ToString("yyyyMMdd") + ".csv");
shellVM.unitStatusBaseFileName = @"unit_status_";
}
Это линия, где я получаю ошибку:
filePath = System.IO.Path.Combine(shellVM.ObsInputFolder, @"unit_status_" + shellVM.ObsDate.ToString("yyyyMMdd") + ".csv");
Я попытался ее исправление, заменив ShellViewModel shellVM;
с ShellViewModel shellVM = new ShellViewModel();
но то дает мне другую ошибку
«ShellViewModel» не содержит конструктор, который принимает 0 аргументов
Как выглядят конструкторы класса 'ShellVM'? – Lee
Из вашего кода вам понадобится экземпляр 'Shell' для создания« ShellViewModel », например. 'new ShellViewModel (shell)'. –
или вам нужно добавить пустой конструктор public ShellViewModel() {} – Sergi0