Я написал простой пользовательский интерфейс с использованием WPF / XAML и успешно использовал метод iNotifyPropertyChanged для обновления некоторых значений .... Ура!
XAML:
<TextBlock Grid.Column="3" Grid.Row="1" Margin=" 1" Text="{Binding DeviceType, StringFormat=0, Mode=OneWay}" FontFamily="Nexa"/>
<TextBlock Grid.Column="3" Grid.Row="2" Margin= "1" Text="{Binding DeviceSerial, StringFormat=0, Mode=OneWay}" FontFamily="Nexa"/>
<TextBlock Grid.Column="3" Grid.Row="3" Margin=" 1" Text="{Binding DeviceName, StringFormat=0, Mode=OneWay}" FontFamily="Nexa"/>
<TextBlock Grid.Column="3" Grid.Row="4" Margin=" 1" Text="{Binding DeviceBatteryLevel, StringFormat=0, Mode=OneWay}" FontFamily="Nexa"/>
Код позади:
public partial class MainWindow : Window
{
public InstrumentViewModel Instrument = new InstrumentViewModel();
public MainWindow()
{
InitializeComponent();
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
DataContext = Instrument;
var collection = new PortableDeviceCollection();
collection.Refresh();
foreach (var device in collection)
{
device.Connect();
if (device.DeviceModel == "Instrument Test Platform")
{
Instrument.DeviceType = device.DeviceModel;
Instrument.DeviceSerial = device.DeviceSerialNumber;
Instrument.DeviceName = device.FriendlyName;
}
}
}
}
Это работает абсолютно нормально.Однако я бы хотел использовать таймер для опроса устройств.Когда я делаю это и пытаюсь использовать метод INotifyPropertyChanged из события таймера, свойства в моем классе инструментов обновляются, но привязки XAML не устанавливаются.
Я пытаюсь:
public partial class MainWindow : Window
{
public InstrumentViewModel Instrument = new InstrumentViewModel();
public MainWindow()
{
InitializeComponent();
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
DataContext = Instrument;
Timer intervalTimer = new Timer(5000);
intervalTimer.Enabled = true;
intervalTimer.AutoReset = true;
intervalTimer.Elapsed += OnTimedEvent;
}
private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
InstrumentViewModel Instrument = new InstrumentViewModel();
var collection = new PortableDeviceCollection();
collection.Refresh();
foreach (var device in collection)
{
device.Connect();
if (device.DeviceModel == "Instrument Test Platform")
{
Instrument.DeviceType = device.DeviceModel;
Instrument.DeviceSerial = device.DeviceSerialNumber;
Instrument.DeviceName = device.FriendlyName;
}
}
}
}
Я предполагаю, что здесь отсутствует какой-то фундаментальный элемент, но я предполагал, что метод OnTimedEvent, находящийся в классе MainWindow, все же сможет получить доступ к DataBinding из кода XAML.
Это связано с тем, где я устанавливаю DataContext = Instrument;
?
Любой совет приветствуется.
Спасибо.