есть базовый класс System.IO.Ports.SerialPort. наследую его и добавляю в него фенечки:
- параметры по умолчанию
- массывы с доступными параметрами
- Код: Выделить всё • Развернуть
public int[] baudRates = { 300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200, 128000 };
public int[] dataBits = { 5, 6, 7, 8 };
...
- добавляю раелизацию интерфейса уведомлений об изменениях полей INotifyPropertyChanged
- добавляю несколько своих ф-ий
- добавление маршрутизированных команд
вот с реализацией INotifyPropertyChanged как раз и проблемы - чтобы сгенерить уведомление нужно знать, что что-то изменилось. частично решается переопределением некоторых ф-ий, например так:
- Код: Выделить всё • Развернуть
new public string PortName
{
get { lock (locker) return base.PortName; }
set
{
lock (locker)
{
if (!IsOpen && null != value && "" != value) base.PortName = value;
NotifyPropertyChanged("PortName");
}
}
}
но есть поля (IsOpen, CtsHolding, DsrHolding), которые в базовом классе непонятно кто и когда может изменить, по крайней мере я не уверен, что могу полностью учесть все нюансы базового класса. CtsHolding, DsrHolding и еще несколько полей вообще пока не трогал и не разбирался с ними (и скорей всего не буду).
IsOpen в базовом классе естественно только для чтения. написать примерно так я не смогу
- Код: Выделить всё • Развернуть
public override bool IsOpen
{
get { return base.IsOpen;}
private set
{
base.IsOpen = value;
NotifyPropertyChanged("IsOpend");
}
}
частично помогает вот такое переопределение
- Код: Выделить всё • Развернуть
new public bool IsOpen
{
get
{
lock(locker)
{
if (_lastIsOpen != base.IsOpen)
{
_lastIsOpen = base.IsOpen;
NotifyPropertyChanged("IsOpend");
}
return base.IsOpen;
}
}
}
но сэттер я в таком случае просто не смогу реализовать. написать
- Код: Выделить всё • Развернуть
private set
{
.....
NotifyPropertyChanged("IsOpend");
}
можно, но толку от этого 0 по модулю - сэттер базовый класс просто не вызовет (или я как-то через одно место переопределяю?)
отловить все изменения IsOpen скорей всего смогу по эксэпшинам и переопределением Open и Close. т.е с уведомлением об изменении интересующих меня полей проблема будет решена. но это всего-лишь один из классов, к которому я добавляю функционал и создаю UI обвёртку, есть классы, в которых я такими способами никак не смогу отследить изменения.