В моем приложении я использую DataGrid для отображения статуса некоторых фрагментов информации из класса, который я создал. Один из столбцов описывает количество времени, прошедшее с момента последнего обновления части класса. Это делается с помощью свойства, которое сравнивает переменную DateTime и возвращает строку, описывающую количество времени, которое прошло (х часов, минут и т. Д.) С момента этого события. Я использую INotifyPropertyChanged для этого строкового свойства раз в секунду, чтобы поддерживать его в актуальном состоянии.
При внесении изменений в мое приложение оно мне нужно, чтобы сохранить состояние всех данных в моем классе, и для этого я использую binaryFormatter.Serialize. Когда для привязки столбца DataGrid установлено значение Mode = OneWay, информация в DataGrid обновляется каждую секунду именно так, как я хочу, но операция сериализации завершается неудачно при попытке сохранить данные, сообщая мне «сериализация делегатов не поддерживается на этой платформе». Если я уберу Mode = OneWay, сериализация будет работать нормально, но DataGrid больше не будет обновлять эту информацию каждую секунду. Любопытно, что если я щелкаю ячейку с этой информацией несколько раз, данные обновляются, но они не обновляются автоматически на экране. Повторный переход на страницу также очевидно обновляет данные.
Вот XAML для столбца DataGrid
<controls:DataGridTemplateColumn Header="Last Update">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate x:DataType="local:Network">
<TextBlock Text="{x:Bind LastUpdate}" Margin="15" Opacity="0.65" FontSize="12" VerticalAlignment="Center"/>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
Вот часть класса, к которой он относится:
DateTime _lastupdate;
public string LastUpdate
{
get
{
TimeSpan diference = (DateTime.Now - _lastupdate);
if (diference.TotalHours > 24)
{
return " (updated " + diference.Days + " Days ago)";
}
else if (diference.TotalMinutes > 60)
{
return " (updated " + diference.Hours + " Hours ago)";
}
else if (diference.TotalSeconds > 60)
{
return " (updated " + diference.Minutes + " Minutes ago)";
}
else
return " (updated " + diference.Seconds + " Seconds ago)";
}
}
Я, честно говоря, заблудился относительно того, почему это может происходить, и если я не смогу правильно обновить эту сетку данных в реальном времени, я не смогу реализовать основную часть приложения, которое использует это DataGrid, который я планировал на будущее. Буквально единственная разница между работающим приложением и неработающим - это Mode = OneWay. Функционально пользовательский интерфейс отлично работает с OneWay, но он не позволяет сохранять изменения, так что это, очевидно, огромная проблема.