fix date format

This commit is contained in:
DismissedLight
2023-09-17 17:54:02 +08:00
parent 68a6af9341
commit fb496497bf
4 changed files with 282 additions and 247 deletions

View File

@@ -244,7 +244,7 @@
<value>尚未刷新</value>
</data>
<data name="ModelEntityDailyNoteRefreshTimeFormat" xml:space="preserve">
<value>刷新于 {0:yyyy/MM/dd HH:mm:ss}</value>
<value>刷新于 {0:yyyy.MM.dd HH:mm:ss}</value>
</data>
<data name="ModelEntitySpiralAbyssScheduleFormat" xml:space="preserve">
<value>第 {0} 期</value>
@@ -834,7 +834,7 @@
<value>在读取游戏进程内存时遇到问题:无法读取到指定地址的有效值</value>
</data>
<data name="ServiceHutaoUserGachaLogExpiredAt" xml:space="preserve">
<value>祈愿记录上传服务有效期至\n{0:yyyy-MM-dd HH:mm:ss}</value>
<value>祈愿记录上传服务有效期至\n{0:yyyy.MM.dd HH:mm:ss}</value>
</data>
<data name="ServiceMetadataFileNotFound" xml:space="preserve">
<value>无法找到缓存的元数据文件</value>

View File

@@ -10,6 +10,7 @@
xmlns:shcb="using:Snap.Hutao.Control.Behavior"
xmlns:shci="using:Snap.Hutao.Control.Image"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shct="using:Snap.Hutao.Control.Text"
xmlns:shvc="using:Snap.Hutao.View.Control"
xmlns:shvs="using:Snap.Hutao.ViewModel.SpiralAbyss"
d:DataContext="{d:DesignInstance shvs:SpiralAbyssRecordViewModel}"
@@ -25,7 +26,7 @@
Grid.Row="1"
DisplayMode="Inline"
IsPaneOpen="True"
OpenPaneLength="120"
OpenPaneLength="256"
PaneBackground="Transparent"
Visibility="{Binding SelectedView, Converter={StaticResource EmptyObjectToVisibilityConverter}}">
<SplitView.Pane>
@@ -35,14 +36,29 @@
SelectedItem="{Binding SelectedView, Mode=TwoWay}">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Entity.Schedule}"/>
<StackPanel Margin="0,6">
<TextBlock Text="{Binding Entity.Schedule}"/>
<TextBlock
Opacity="0.7"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding TimeFormatted}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</SplitView.Pane>
<SplitView.Content>
<Grid>
<Pivot>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Rectangle
Grid.Row="0"
Height="{ThemeResource AppBarThemeCompactHeight}"
VerticalAlignment="Top"
Fill="{ThemeResource CardBackgroundFillColorDefaultBrush}"/>
<Pivot Grid.RowSpan="2">
<Pivot.RightHeader>
<CommandBar Grid.Row="0" DefaultLabelPosition="Right">
<AppBarButton
@@ -53,243 +69,259 @@
Command="{Binding RefreshCommand}"
Icon="{shcm:FontIcon Glyph=&#xE72C;}"
Label="{shcm:ResourceString Name=ViewSpiralAbyssRefresh}"/>
</CommandBar>
</Pivot.RightHeader>
<PivotItem DataContext="{Binding SelectedView}" Header="{shcm:ResourceString Name=ViewSpiralAbyssStatistics}">
<ScrollViewer>
<Grid>
<Grid.Resources>
<x:Double x:Key="SettingsCardWrapThreshold">0</x:Double>
<x:Double x:Key="SettingsCardWrapNoIconThreshold">0</x:Double>
<x:Double x:Key="SettingsCardMinHeight">0</x:Double>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="286"/>
<ColumnDefinition Width="286"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<StackPanel
Grid.Column="0"
Margin="16,0,8,16"
Spacing="{StaticResource SettingsCardSpacing}">
<cwc:SettingsCard Content="{Binding MaxFloor}" Header="{shcm:ResourceString Name=ViewSpiralAbyssMaxFloor}"/>
<cwc:SettingsCard Content="{Binding TotalBattleTimes}" Header="{shcm:ResourceString Name=ViewSpiralAbyssBattleTimes}"/>
<cwc:SettingsCard Content="{Binding TotalStar}" Header="{shcm:ResourceString Name=ViewSpiralAbyssTotalStar}"/>
<AppBarButton Icon="{shcm:FontIcon Glyph=&#xE8A1;}" Label="{shcm:ResourceString Name=ViewSpiralAbyssStatistics}">
<AppBarButton.Flyout>
<Flyout>
<Flyout.FlyoutPresenterStyle>
<Style BasedOn="{StaticResource DefaultFlyoutPresenterStyle}" TargetType="FlyoutPresenter">
<Setter Property="MaxWidth" Value="1920"/>
</Style>
</Flyout.FlyoutPresenterStyle>
<Grid ColumnSpacing="6" DataContext="{Binding SelectedView}">
<Grid.Resources>
<x:Double x:Key="SettingsCardWrapThreshold">0</x:Double>
<x:Double x:Key="SettingsCardWrapNoIconThreshold">0</x:Double>
<x:Double x:Key="SettingsCardMinHeight">0</x:Double>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="305"/>
<ColumnDefinition Width="225"/>
</Grid.ColumnDefinitions>
<TextBlock
Margin="1,6,0,5"
Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="{shcm:ResourceString Name=ViewSpiralAbyssReveal}"/>
<ItemsControl HorizontalAlignment="Left" ItemsSource="{Binding Reveals}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<cwc:UniformGrid ColumnSpacing="16" Columns="4"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<shvc:BottomTextControl Text="{Binding Value}">
<shvc:ItemIcon
Width="52"
Height="52"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
</shvc:BottomTextControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
<StackPanel Grid.Column="1" Spacing="{StaticResource SettingsCardSpacing}">
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssDefeat}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding Defeat.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding Defeat.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssDamage}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding Damage.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding Damage.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssTakeDamage}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding TakeDamage.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding TakeDamage.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssNormalSkill}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding NormalSkill.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding NormalSkill.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssEnergySkill}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding EnergySkill.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding EnergySkill.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
</StackPanel>
</Grid>
</ScrollViewer>
</PivotItem>
<PivotItem DataContext="{Binding SelectedView}" Header="{shcm:ResourceString Name=ViewSpiralAbyssDetail}">
<ScrollViewer VerticalAlignment="Top" HorizontalScrollBarVisibility="Auto">
<ItemsControl
Margin="16,16,0,0"
ItemsPanel="{StaticResource HorizontalStackPanelTemplate}"
ItemsSource="{Binding Floors}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border
Margin="0,0,16,16"
VerticalAlignment="Top"
Style="{StaticResource BorderCardStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="8,8,8,0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource BaseTextBlockStyle}" Text="{Binding Index}"/>
<StackPanel
Grid.Column="1"
HorizontalAlignment="Right"
Orientation="Horizontal">
<BitmapIcon
Width="20"
ShowAsMonochrome="True"
UriSource="ms-appx:///Resource/Icon/UI_Icon_Tower_Star.png"/>
<StackPanel Grid.Column="0" Spacing="{StaticResource SettingsCardSpacing}">
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssDefeat}">
<StackPanel Orientation="Horizontal">
<TextBlock
Width="16"
Margin="8,0,0,0"
Style="{StaticResource BaseTextBlockStyle}"
Text="{Binding Star}"
TextAlignment="Center"/>
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding Defeat.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding Defeat.SideIcon}"/>
</StackPanel>
</Grid>
<ItemsControl
Grid.Row="1"
Margin="0,0,0,8"
ItemsSource="{Binding Levels}">
</cwc:SettingsCard>
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssDamage}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding Damage.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding Damage.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssTakeDamage}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding TakeDamage.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding TakeDamage.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssNormalSkill}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding NormalSkill.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding NormalSkill.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
<cwc:SettingsCard Header="{shcm:ResourceString Name=ViewSpiralAbyssEnergySkill}">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,16,0"
VerticalAlignment="Center"
Text="{Binding EnergySkill.Value}"/>
<shci:CachedImage
Width="48"
Height="48"
Margin="-8,-24,-8,-8"
Source="{Binding EnergySkill.SideIcon}"/>
</StackPanel>
</cwc:SettingsCard>
</StackPanel>
<StackPanel Grid.Column="1" Spacing="{StaticResource SettingsCardSpacing}">
<cwc:SettingsCard Content="{Binding MaxFloor}" Header="{shcm:ResourceString Name=ViewSpiralAbyssMaxFloor}"/>
<cwc:SettingsCard Content="{Binding TotalBattleTimes}" Header="{shcm:ResourceString Name=ViewSpiralAbyssBattleTimes}"/>
<cwc:SettingsCard Content="{Binding TotalStar}" Header="{shcm:ResourceString Name=ViewSpiralAbyssTotalStar}"/>
<TextBlock
Margin="1,6,0,5"
Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="{shcm:ResourceString Name=ViewSpiralAbyssReveal}"/>
<ItemsControl HorizontalAlignment="Left" ItemsSource="{Binding Reveals}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<cwc:UniformGrid ColumnSpacing="3" Columns="4"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="0,8,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<MenuFlyoutSeparator/>
<Grid Grid.Row="1" Margin="8,8,8,0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Index}"/>
<StackPanel
Grid.Column="1"
HorizontalAlignment="Right"
Orientation="Horizontal">
<BitmapIcon
Width="20"
ShowAsMonochrome="True"
UriSource="ms-appx:///Resource/Icon/UI_Icon_Tower_Star.png"/>
<TextBlock
Width="16"
Margin="8,0,0,0"
Text="{Binding Star}"
TextAlignment="Center"/>
</StackPanel>
</Grid>
<ItemsControl
Grid.Row="2"
Margin="8,0,0,0"
ItemsSource="{Binding Battles}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<ItemsControl
Margin="0,8,0,0"
ItemsPanel="{StaticResource HorizontalStackPanelTemplate}"
ItemsSource="{Binding Avatars}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<shvc:ItemIcon
Width="60"
Height="60"
Margin="0,0,8,0"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock
Margin="0,2,0,0"
Opacity="0.6"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding Time}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
<shvc:BottomTextControl Text="{Binding Value}">
<shvc:ItemIcon
Width="52"
Height="52"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
</shvc:BottomTextControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
</Flyout>
</AppBarButton.Flyout>
</AppBarButton>
</CommandBar>
</Pivot.RightHeader>
<PivotItem DataContext="{Binding SelectedView}" Header="{shcm:ResourceString Name=ViewSpiralAbyssDetail}">
<ScrollViewer VerticalAlignment="Top">
<StackPanel>
<TextBlock
Margin="16,16,0,0"
Style="{ThemeResource SubtitleTextBlockStyle}"
Text="{Binding BlessingName}"/>
<ItemsControl Margin="16,0,16,0" ItemsSource="{Binding Blessings}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<shct:DescriptionTextBlock Description="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl
Margin="16,16,0,0"
ItemsPanel="{StaticResource HorizontalStackPanelTemplate}"
ItemsSource="{Binding Floors}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border
Margin="0,0,16,16"
VerticalAlignment="Top"
Style="{StaticResource BorderCardStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="8,8,8,0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource BaseTextBlockStyle}" Text="{Binding Index}"/>
<StackPanel
Grid.Column="1"
HorizontalAlignment="Right"
Orientation="Horizontal">
<BitmapIcon
Width="20"
ShowAsMonochrome="True"
UriSource="ms-appx:///Resource/Icon/UI_Icon_Tower_Star.png"/>
<TextBlock
Width="16"
Margin="8,0,0,0"
Style="{StaticResource BaseTextBlockStyle}"
Text="{Binding Star}"
TextAlignment="Center"/>
</StackPanel>
</Grid>
<ItemsControl
Grid.Row="1"
Margin="0,0,0,8"
ItemsSource="{Binding Levels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="0,8,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<MenuFlyoutSeparator/>
<Grid Grid.Row="1" Margin="8,8,8,0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Index}"/>
<StackPanel
Grid.Column="1"
HorizontalAlignment="Right"
Orientation="Horizontal">
<BitmapIcon
Width="20"
ShowAsMonochrome="True"
UriSource="ms-appx:///Resource/Icon/UI_Icon_Tower_Star.png"/>
<TextBlock
Width="16"
Margin="8,0,0,0"
Text="{Binding Star}"
TextAlignment="Center"/>
</StackPanel>
</Grid>
<ItemsControl
Grid.Row="2"
Margin="8,0,0,0"
ItemsSource="{Binding Battles}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<ItemsControl
Margin="0,8,0,0"
ItemsPanel="{StaticResource HorizontalStackPanelTemplate}"
ItemsSource="{Binding Avatars}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<shvc:ItemIcon
Width="60"
Height="60"
Margin="0,0,8,0"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock
Margin="0,2,0,0"
Opacity="0.6"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{Binding Time}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ScrollViewer>
</PivotItem>
</Pivot>

View File

@@ -14,10 +14,10 @@ namespace Snap.Hutao.ViewModel.SpiralAbyss;
/// 深渊视图
/// </summary>
[HighQuality]
internal sealed class SpiralAbyssView : IEntityOnly<SpiralAbyssEntry>,
internal sealed class SpiralAbyssView : IEntityOnly<SpiralAbyssEntry?>,
IMappingFrom<SpiralAbyssView, SpiralAbyssEntry, SpiralAbyssMetadataContext>
{
private readonly SpiralAbyssEntry entity;
private readonly SpiralAbyssEntry? entity;
/// <summary>
/// 构造一个新的深渊视图
@@ -25,16 +25,11 @@ internal sealed class SpiralAbyssView : IEntityOnly<SpiralAbyssEntry>,
/// <param name="entity">实体</param>
/// <param name="idAvatarMap">Id角色映射</param>
private SpiralAbyssView(SpiralAbyssEntry entity, SpiralAbyssMetadataContext context)
: this(context.IdScheduleMap[(uint)entity.ScheduleId], context)
{
this.entity = entity;
Web.Hoyolab.Takumi.GameRecord.SpiralAbyss.SpiralAbyss spiralAbyss = entity.SpiralAbyss;
TowerSchedule towerSchedule = context.IdScheduleMap[(uint)entity.ScheduleId];
TimeFormatted = $"{towerSchedule.Open:yyyy/MM/dd HH:mm:ss} - {towerSchedule.Close:yyyy/MM/dd HH:mm:ss}";
BlessingName = towerSchedule.BuffName;
Blessings = towerSchedule.Descriptions;
Web.Hoyolab.Takumi.GameRecord.SpiralAbyss.SpiralAbyss? spiralAbyss = entity.SpiralAbyss;
TotalBattleTimes = spiralAbyss.TotalBattleTimes;
TotalStar = spiralAbyss.TotalStar;
MaxFloor = spiralAbyss.MaxFloor;
@@ -47,7 +42,15 @@ internal sealed class SpiralAbyssView : IEntityOnly<SpiralAbyssEntry>,
Floors = spiralAbyss.Floors.Select(f => new FloorView(f, context.IdAvatarMap)).Reverse().ToList();
}
public SpiralAbyssEntry Entity { get => entity; }
private SpiralAbyssView(TowerSchedule towerSchedule, SpiralAbyssMetadataContext context)
{
TimeFormatted = $"{towerSchedule.Open:yyyy.MM.dd HH:mm} - {towerSchedule.Close:yyyy.MM.dd HH:mm}";
BlessingName = towerSchedule.BuffName;
Blessings = towerSchedule.Descriptions;
}
public SpiralAbyssEntry? Entity { get => entity; }
public string TimeFormatted { get; }
@@ -68,12 +71,12 @@ internal sealed class SpiralAbyssView : IEntityOnly<SpiralAbyssEntry>,
/// <summary>
/// 最深抵达
/// </summary>
public string MaxFloor { get; }
public string MaxFloor { get; } = default!;
/// <summary>
/// 出战次数
/// </summary>
public List<RankAvatar> Reveals { get; }
public List<RankAvatar> Reveals { get; } = default!;
/// <summary>
/// 击破次数

View File

@@ -23,7 +23,7 @@ internal sealed class Announcement : UploadAnnouncement
/// </summary>
public long LastUpdateTime { get; set; }
public string UpdateTimeFormatted { get => $"{DateTimeOffset.FromUnixTimeSeconds(LastUpdateTime).ToLocalTime():yyyy-MM-dd HH:mm:ss}"; }
public string UpdateTimeFormatted { get => $"{DateTimeOffset.FromUnixTimeSeconds(LastUpdateTime).ToLocalTime():yyyy.MM.dd HH:mm:ss}"; }
public ICommand? DismissCommand { get; set; }
}