Софтуерно Инженерство
Loading...
+ Нов въпрос
vanmx avatar vanmx 4 Точки

Въпрос с WPF + XAML + четене от сериен порт

Здравейте

Трябва да направя едно проста програмка която чете данни от серийния порт и ги визуализира на прозорче. И понеже нямам почти никакъв опит с тези работи, явно ми липсват някакви основни знания и нещата не тръгват :). Нещата с байндването май не се получават.  С четене на тутариали и гледане на код от интернет стигнах до тук:

това ми е класът за четене от порта:

[CODE]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;

namespace Inspector
{
    class MyCommPort : INotifyPropertyChanged
    {
        SerialPort serialPort = null;
        public string TestText = "";
        public MyCommPort()
        {
            serialPort = new SerialPort("COM7", 9600);
            serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            serialPort.Open();
        }
        ~MyCommPort()
        {
            serialPort.Close();
        }

        
        
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string testString = null;
            string indata = sp.ReadLine();
            TestText = indata;
           
        }

       
        
        // Extend the INotifyPropertyChanged interface
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
               
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}
[/CODE]

това тук ми е XAML - а

[CODE]<Window x:Class="Inspector.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Inspector"
        mc:Ignorable="d"
        
        Title="MainWindow" Height="720" Width="1280">
    
    <Grid
            <Paragraph>
                   <TextBlock Name="TestText" Text="{Binding UpdateSourceTrigger=PropertyChanged, Path=TestText}"></TextBlock>
            </Paragraph>
    </Grid>
</Window>
[/CODE]

о това е code behind - а

[CODE]using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.IO.Ports;

 


namespace Inspector
{
    
    public partial class MainWindow : Window
    {


        public MainWindow()
        {
            InitializeComponent();


            TestText.DataContext = new MyCommPort();
            
        }

       
    }
}[/CODE]


Резултатът e празен екран и не мога да си обясня защо. На серийния ми порт е свързано едно Arduino което просто брои от 0 до int.MaxValue

Тагове:
0
Общи приказки
RFilipov avatar RFilipov 136 Точки

TestText

трябва да изглежда така 

private string testText;

public string TestText

{

get { return this.testText }

set { this.testText = value; OnPropertyChanged("TestText"); }

}|

0
10/12/2017 23:09:28
vanmx avatar vanmx 4 Точки

Така го направих, но все още на прозореца нямам нищо. А това вярно ли е ?

<TextBlock Name="TestText" Text="{Binding UpdateSourceTrigger=PropertyChanged, Path=TestText}">

0
RFilipov avatar RFilipov 136 Точки

Вярно е. Пробвай да зададеш DataContext на Window:

this.DataContext = new MyCommPort();

0
vanmx avatar vanmx 4 Точки

Не се получава. Прочетох за някви неща с Dispatcher.Invoke, сега разучавам как се използва тази работа

0