macattack18
New member
- Joined
- Oct 14, 2015
- Messages
- 1
- Programming Experience
- 1-3
I am trying to learn MVVM. Right now I have some simple DataBinding working but I am struggling with some higher concepts. For Instance when my program launches it needs to read an xml file and check how many profiles are there. If there are 2 or more it will display a new window that will ask you to pick the profile you want. If there is only 1 it loads it.
My First question is what is the proper method for displaying a new window. Since it needs Code to determine if it should be displayed I feel it should go into the ViewModel but since it is making a new Window I don't know if it is okay to do that?
Second When the view model loads how do I start executing code? I have been working with someone else and he said I should use a Service. Why do I have to do it this way why not just make a method and call it from the constructor? I keep hearing the word injecting being used a lot. What exactly do they mean by injecting the service?
Lastly Can someone point me at a good MVVM example everything I looked at seems difficult to follow and various MVVM guides I look up differ enough that I am not sure which one to follow.
ViewModel
Service
My First question is what is the proper method for displaying a new window. Since it needs Code to determine if it should be displayed I feel it should go into the ViewModel but since it is making a new Window I don't know if it is okay to do that?
Second When the view model loads how do I start executing code? I have been working with someone else and he said I should use a Service. Why do I have to do it this way why not just make a method and call it from the constructor? I keep hearing the word injecting being used a lot. What exactly do they mean by injecting the service?
Lastly Can someone point me at a good MVVM example everything I looked at seems difficult to follow and various MVVM guides I look up differ enough that I am not sure which one to follow.
ViewModel
C#:
public ConfigModel Model { get; set; }
private IMyConfigModelService _Service;
public ConfigViewModel()
{
_Service = new IConfigModelService();
Model = _Service.LoadModel();
}
public ConfigViewModel(IMyConfigModelService service)
{
_Service = service;
//Load the model from the service
}
Service
C#:
public interface IMyConfigModelService
{
ConfigModel LoadModel();
}
public class IConfigModelService : IMyConfigModelService
{
public ConfigModel Model { get; private set; }
public ConfigModel LoadModel()
{
Model = new ConfigModel();
string workingPath = "C:\\Users\\amcateer\\Documents\\Automation";
ReadConfigFile(workingPath);
ReadXML(workingPath);
return Model;
}
private void ReadConfigFile(string workingPath)
{
string configPath = workingPath + "\\FTConfiguration.properties";
string[] ConfigFile = File.ReadAllLines(configPath);
foreach (string s in ConfigFile)
{
string[] Property = s.Split('=');
switch (Property[0])
{
case "ENVIRONMENT":
{
int i = -1;
Int32.TryParse(Property[1], out i);
Model.EnviromentNum = i;
break;
}
case "ENVIRONMENT_NAME":
{
Model.EnviromentName = Property[1];
break;
}
case "BROWSER":
{
Model.Browser = Property[1];
break;
}
case "RECIPIENT":
{
string[] emails = Property[1].Split(',');
foreach (string email in emails)
{
if (email != "")
{
Model.EmailRecipients.Add(email);
}
}
break;
}
case "NO_OF_DEVICES":
{
int i = -1;
Int32.TryParse(Property[1], out i);
Model.NumDevices = i;
break;
}
case "TEST_DRIVER_FILE":
{
Model.TestFile = Property[1];
break;
}
case "NEW_UI_EXECUTION":
{
Model.NewUIExecution = Property[1];
break;
}
case "LOCALE":
{
Model.Locale = Property[1];
break;
}
case "GRID_EXECUTION":
{
Model.GridExecution = Property[1];
break;
}
case "Security":
{
Model.Security = Property[1];
break;
}
case "ReRunFailed":
{
Model.ReRunFailed = Property[1];
break;
}
case "DOWNLOAD_CE":
{
Model.DownloadCE = Property[1];
break;
}
case "INTERMEDIATE_REPORT":
{
Model.IntermediateReport = Property[1];
break;
}
}
}
}
public void ReadXML(string workingPath)
{
string xmlPath = workingPath + "\\Configuration.xml";
ArrayList allOptions = new ArrayList();
string xmlContent = "";
try
{
xmlContent = File.ReadAllText(xmlPath);
XmlReader reader = XmlReader.Create(new StringReader(xmlContent));
// parse the XML file
while (reader.Read())
{
switch (reader.Name)
{
case "ENVIRONMENT":
{
string optionsStr = (reader.ReadString()).Replace(" ", "");
Model.LstEnviromentNum.AddRange(optionsStr.Split(','));
break;
}
case "ENVIRONMENT_NAME":
{
string optionsStr = (reader.ReadString()).Replace(" ", "");
Model.LstEnviromentName.AddRange(optionsStr.Split(','));
break;
}
case "BROWSER":
{
string optionsStr = (reader.ReadString()).Replace(" ", "");
Model.LstBrowser.AddRange(optionsStr.Split(','));
break;
}
case "NO_OF_DEVICES":
{
string optionsStr = (reader.ReadString()).Replace(" ", "");
Model.LstNumDevices.AddRange(optionsStr.Split(','));
break;
}
case "TEST_DRIVER_FILE":
{
string optionsStr = (reader.ReadString()).Replace(" ", "");
Model.LstTestFile.AddRange(optionsStr.Split(','));
break;
}
case "LOCALE":
{
string optionsStr = (reader.ReadString()).Replace(" ", "");
Model.LstLocale.AddRange(optionsStr.Split(','));
break;
}
}
}
}
catch (Exception ex)
{
}
}
}