mirror of https://github.com/2dust/v2rayN
2dust
3 months ago
5 changed files with 148 additions and 17 deletions
@ -0,0 +1,96 @@ |
|||||||
|
<UserControl |
||||||
|
x:Class="v2rayN.Desktop.Views.CheckUpdateView" |
||||||
|
xmlns="https://github.com/avaloniaui" |
||||||
|
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:resx="clr-namespace:ServiceLib.Resx;assembly=ServiceLib" |
||||||
|
xmlns:vms="clr-namespace:ServiceLib.ViewModels;assembly=ServiceLib" |
||||||
|
d:DesignHeight="450" |
||||||
|
d:DesignWidth="800" |
||||||
|
x:DataType="vms:CheckUpdateViewModel" |
||||||
|
mc:Ignorable="d"> |
||||||
|
<Button Classes="Tertiary"> |
||||||
|
<Button.Content> |
||||||
|
<TextBlock Text="{x:Static resx:ResUI.menuCheckUpdate}" /> |
||||||
|
</Button.Content> |
||||||
|
<Button.Flyout> |
||||||
|
<Flyout Placement="RightEdgeAlignedTop"> |
||||||
|
<DockPanel Margin="16"> |
||||||
|
<StackPanel |
||||||
|
HorizontalAlignment="Right" |
||||||
|
Classes="Margin8" |
||||||
|
DockPanel.Dock="Bottom" |
||||||
|
Orientation="Horizontal"> |
||||||
|
|
||||||
|
<TextBlock |
||||||
|
HorizontalAlignment="Left" |
||||||
|
VerticalAlignment="Center" |
||||||
|
Classes="Margin8" |
||||||
|
Text="{x:Static resx:ResUI.TbSettingsEnableCheckPreReleaseUpdate}" /> |
||||||
|
<ToggleSwitch |
||||||
|
x:Name="togEnableCheckPreReleaseUpdate" |
||||||
|
HorizontalAlignment="Left" |
||||||
|
Classes="Margin8" /> |
||||||
|
|
||||||
|
<Button |
||||||
|
x:Name="btnCheckUpdate" |
||||||
|
Width="100" |
||||||
|
Classes="Margin8" |
||||||
|
Content="{x:Static resx:ResUI.menuCheckUpdate}" /> |
||||||
|
</StackPanel> |
||||||
|
|
||||||
|
<StackPanel> |
||||||
|
<ListBox |
||||||
|
x:Name="lstCheckUpdates" |
||||||
|
BorderThickness="1" |
||||||
|
ItemsSource="{Binding CheckUpdateItems}"> |
||||||
|
<ItemsControl.ItemsPanel> |
||||||
|
<ItemsPanelTemplate> |
||||||
|
<StackPanel Orientation="Vertical" /> |
||||||
|
</ItemsPanelTemplate> |
||||||
|
</ItemsControl.ItemsPanel> |
||||||
|
<ItemsControl.ItemTemplate> |
||||||
|
<DataTemplate> |
||||||
|
<Border |
||||||
|
Width="500" |
||||||
|
Height="80" |
||||||
|
Margin="0" |
||||||
|
VerticalAlignment="Center" |
||||||
|
Theme="{StaticResource CardBorder}"> |
||||||
|
<Grid> |
||||||
|
<Grid.RowDefinitions> |
||||||
|
<RowDefinition Height="Auto" /> |
||||||
|
</Grid.RowDefinitions> |
||||||
|
<Grid.ColumnDefinitions> |
||||||
|
<ColumnDefinition Width="1*" /> |
||||||
|
<ColumnDefinition Width="1*" /> |
||||||
|
<ColumnDefinition Width="3*" /> |
||||||
|
</Grid.ColumnDefinitions> |
||||||
|
<ToggleSwitch |
||||||
|
x:Name="togAutoRefresh" |
||||||
|
Grid.Column="0" |
||||||
|
Margin="8" |
||||||
|
HorizontalAlignment="Left" |
||||||
|
VerticalAlignment="Center" |
||||||
|
IsChecked="{Binding isSelected}" /> |
||||||
|
<TextBlock |
||||||
|
Grid.Column="1" |
||||||
|
VerticalAlignment="Center" |
||||||
|
Text="{Binding coreType}" /> |
||||||
|
<TextBlock |
||||||
|
Grid.Column="2" |
||||||
|
VerticalAlignment="Center" |
||||||
|
Text="{Binding remarks}" |
||||||
|
TextWrapping="WrapWithOverflow" /> |
||||||
|
</Grid> |
||||||
|
</Border> |
||||||
|
</DataTemplate> |
||||||
|
</ItemsControl.ItemTemplate> |
||||||
|
</ListBox> |
||||||
|
</StackPanel> |
||||||
|
</DockPanel> |
||||||
|
</Flyout> |
||||||
|
</Button.Flyout> |
||||||
|
</Button> |
||||||
|
</UserControl> |
@ -0,0 +1,48 @@ |
|||||||
|
using Avalonia.ReactiveUI; |
||||||
|
using Avalonia.Threading; |
||||||
|
using ReactiveUI; |
||||||
|
using System.Reactive.Disposables; |
||||||
|
|
||||||
|
namespace v2rayN.Desktop.Views |
||||||
|
{ |
||||||
|
public partial class CheckUpdateView : ReactiveUserControl<CheckUpdateViewModel> |
||||||
|
{ |
||||||
|
public CheckUpdateView() |
||||||
|
{ |
||||||
|
InitializeComponent(); |
||||||
|
|
||||||
|
ViewModel = new CheckUpdateViewModel(UpdateViewHandler); |
||||||
|
|
||||||
|
this.WhenActivated(disposables => |
||||||
|
{ |
||||||
|
this.OneWayBind(ViewModel, vm => vm.CheckUpdateItems, v => v.lstCheckUpdates.ItemsSource).DisposeWith(disposables); |
||||||
|
|
||||||
|
this.Bind(ViewModel, vm => vm.EnableCheckPreReleaseUpdate, v => v.togEnableCheckPreReleaseUpdate.IsChecked).DisposeWith(disposables); |
||||||
|
this.BindCommand(ViewModel, vm => vm.CheckUpdateCmd, v => v.btnCheckUpdate).DisposeWith(disposables); |
||||||
|
this.OneWayBind(ViewModel, vm => vm.IsCheckUpdate, v => v.btnCheckUpdate.IsEnabled).DisposeWith(disposables); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj) |
||||||
|
{ |
||||||
|
switch (action) |
||||||
|
{ |
||||||
|
case EViewAction.DispatcherCheckUpdate: |
||||||
|
if (obj is null) return false; |
||||||
|
Dispatcher.UIThread.Post(() => |
||||||
|
ViewModel?.UpdateViewResult((CheckUpdateItem)obj), |
||||||
|
DispatcherPriority.Default); |
||||||
|
break; |
||||||
|
|
||||||
|
case EViewAction.DispatcherCheckUpdateFinished: |
||||||
|
if (obj is null) return false; |
||||||
|
Dispatcher.UIThread.Post(() => |
||||||
|
ViewModel?.UpdateFinishedResult((bool)obj), |
||||||
|
DispatcherPriority.Default); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
return await Task.FromResult(true); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue