2016-06-02 3 views
0

У меня есть два класса и окно 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 аргументов

+0

Как выглядят конструкторы класса 'ShellVM'? – Lee

+0

Из вашего кода вам понадобится экземпляр 'Shell' для создания« ShellViewModel », например. 'new ShellViewModel (shell)'. –

+0

или вам нужно добавить пустой конструктор public ShellViewModel() {} – Sergi0

ответ

-1

Это просто означает, что одно из значений, которые вы передаете методу Combine, равно null. Поместите точку разрыва в строку и посмотрите, какое значение равно null, а затем перейдите и исправьте класс, чтобы он не возвращал значение null. Слепое изменение ViewModels не решит проблему, если вы не знаете, в чем проблема. Если вам нужна дополнительная помощь, вам придется опубликовать код ShellViewModel.