So, jetzt hab ich mir die Artikel alle durchgelesen. Verstanden hab ich es nicht zu 100%.
Daher hab ich nun mal das Projekt umgebaut.
Es gibt nun eine MainModel Klasse und eine MainViewModel. Das View muss ich noch basteln...
Hier die MainModel Klasse:
Spoiler anzeigen
und dazu die MainViewModel:
Spoiler anzeigen
nun will/muss ich im View ja 2 MeasuredValue bekommen. (Serverraum und Elektroraum). 2 verschiedene ComPorts.
Muss ich da nun 2 Methoden machen und in 2 unterschiedliche Variablen rein packen?
Oder besser eine List<of String> (observable hab ich noch nicht geschafft anzugucken).
Wenn das View startet, sollen die Werte abgeholt werden und dann alle 5 Minuten aktualisiert werden.
@ErfinderDesRades das mit deinen Helpers und den Testdaten war mir zu hoch
Im Grunde gibt es momentan 2 ComPorts, die abgefragt werden müssen pcmeasure.com1.1 und pcmeasure.com3.3 (LAN Port 1 und LAN Port 11).
EDIT: wobei ich grad sehe, das im MainViewModel bei den beiden Propertys ja keine Setter benötigt werden, also muss die OnPropertyChanged ja in den Getter...
Daher hab ich nun mal das Projekt umgebaut.
Es gibt nun eine MainModel Klasse und eine MainViewModel. Das View muss ich noch basteln...
Hier die MainModel Klasse:
C#-Quellcode
- class MainModel
- {
- public double MeasuredValue { get;private set; }
- public bool IsValid { get; private set; }
- public bool IsConnected { get; private set; }
- NetworkStream _NetworkStream;
- StreamReader _StreamReader;
- TcpClient _TCPClient;
- public MainModel() { }
- public double GetMeasuredValue(string client)
- {
- ConnectToServer();
- client += Environment.NewLine;
- byte[] sendbyte = new ASCIIEncoding().GetBytes(client);
- _NetworkStream.Write(sendbyte, 0, sendbyte.Length);
- _NetworkStream.Flush();
- string result = null;
- result = _StreamReader.ReadLine();
- DisconnectFromServer();
- string tempstring = null;
- string[] temparray = result.Split(';');
- for (int i = 0; i < temparray.Length - 1;)
- {
- if (temparray[i].StartsWith("valid"))
- if (temparray[i].Substring(6).Equals("1"))
- IsValid = true;
- if (temparray[i].StartsWith("value"))
- tempstring = temparray[i].Substring(6);
- }
- NumberFormatInfo numberformat = new NumberFormatInfo();
- numberformat.NumberDecimalSeparator = ".";
- return MeasuredValue = double.Parse(tempstring, numberformat);
- }
- private void ConnectToServer()
- {
- _TCPClient = new TcpClient("10.21.89.246", 4000);
- _StreamReader = new StreamReader(_TCPClient.GetStream());
- _NetworkStream = _TCPClient.GetStream();
- _TCPClient.ReceiveTimeout = 2000;
- IsConnected = true;
- }
- private void DisconnectFromServer()
- {
- _TCPClient.Close();
- IsConnected = false;
- }
- }
und dazu die MainViewModel:
C#-Quellcode
- class MainViewModel : Class.ViewModelBase
- {
- //Model kapseln
- private Model.MainModel _MainModel;
- //Konstruktor
- public MainViewModel(Model.MainModel mainmodel)
- {
- this._MainModel = mainmodel;
- }
- //Eigenschaften der ModelKlasse 'MainModel' kapseln!!!
- public double MeasuredValue
- {
- get{return this._MainModel.MeasuredValue;
- this.OnPropertyChanged("MeasuredValue");}
- }
- public bool IsValid
- {
- get { return this._MainModel.IsValid;
- this.OnPropertyChanged("IsValid");}
- }
- public bool IsConnected
- {
- get { return this._MainModel.IsConnected;
- this.OnPropertyChanged("IsConnected"); }
- }
- private double GetMeasuredValue(string comPort)
- {
- double measureValue = _MainModel.GetMeasuredValue(comPort);
- if (measureValue != 0 && IsValid)
- return MeasuredValue;
- return 0;
- }
- }
nun will/muss ich im View ja 2 MeasuredValue bekommen. (Serverraum und Elektroraum). 2 verschiedene ComPorts.
Muss ich da nun 2 Methoden machen und in 2 unterschiedliche Variablen rein packen?
Oder besser eine List<of String> (observable hab ich noch nicht geschafft anzugucken).
Wenn das View startet, sollen die Werte abgeholt werden und dann alle 5 Minuten aktualisiert werden.
@ErfinderDesRades das mit deinen Helpers und den Testdaten war mir zu hoch
Im Grunde gibt es momentan 2 ComPorts, die abgefragt werden müssen pcmeasure.com1.1 und pcmeasure.com3.3 (LAN Port 1 und LAN Port 11).
EDIT: wobei ich grad sehe, das im MainViewModel bei den beiden Propertys ja keine Setter benötigt werden, also muss die OnPropertyChanged ja in den Getter...
"Hier könnte Ihre Werbung stehen..."