1
0

fix: Some page relation is not responsed.

This commit is contained in:
Ca2didi 2025-03-29 21:18:24 +08:00
parent b1582ad4d4
commit f687dc33a2
8 changed files with 62 additions and 23 deletions

View File

@ -33,13 +33,13 @@
<Assembly Path="C:\Users\Cardi\.nuget\packages\irihi.ursa\1.10.0\lib\net8.0\Ursa.dll" />
 <Assembly Path="C:\Users\Cardi\.nuget\packages\irihi.ursa\1.10.0\lib\net8.0\Ursa.dll" />
<Assembly Path="C:\Users\Cardi\.nuget\packages\irihi.ursa.themes.semi\1.10.0\lib\netstandard2.0\Ursa.Themes.Semi.dll" />
 <Assembly Path="C:\Users\Cardi\.nuget\packages\irihi.ursa.themes.semi\1.10.0\lib\netstandard2.0\Ursa.Themes.Semi.dll" />
&lt;/AssemblyExplorer&gt;</s:String> &lt;/AssemblyExplorer&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=b5573ef9_002Db554_002D4a56_002D82c4_002D2531c8feef65/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" IsLocked="True" Name="PathValidationTest" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD; <s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=b5573ef9_002Db554_002D4a56_002D82c4_002D2531c8feef65/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" IsLocked="True" Name="PathValidationTest" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;&#xD; &lt;TestAncestor&gt;
&lt;TestId&gt;MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit&lt;/TestId&gt;&#xD; &lt;TestId&gt;MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit&lt;/TestId&gt;
&lt;/TestAncestor&gt;&#xD; &lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String> &lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=f3f8a684_002Dc08e_002D489f_002D949c_002D6c38a1ed63b0/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="PathValidationTest #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD; <s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=f3f8a684_002Dc08e_002D489f_002D949c_002D6c38a1ed63b0/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="PathValidationTest #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;&#xD; &lt;TestAncestor&gt;
&lt;TestId&gt;MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit.PathValidationTest&lt;/TestId&gt;&#xD; &lt;TestId&gt;MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit.PathValidationTest&lt;/TestId&gt;
&lt;/TestAncestor&gt;&#xD; &lt;/TestAncestor&gt;
&lt;/SessionState&gt;</s:String></wpf:ResourceDictionary> &lt;/SessionState&gt;</s:String></wpf:ResourceDictionary>

View File

@ -0,0 +1,21 @@
using System;
using System.Reactive;
using ReactiveUI;
namespace Flawless.Client.ViewModels;
public class MainViewModel : ViewModelBase, IScreen, IRoutableViewModel
{
public string? UrlPathSegment { get; } = Guid.NewGuid().ToString();
public IScreen HostScreen { get; }
public RoutingState Router { get; } = new RoutingState();
public ReactiveCommand<Unit, IRoutableViewModel> GoBackCommand => Router.NavigateBack;
public MainViewModel(IScreen hostScreen)
{
HostScreen = hostScreen;
}
}

View File

@ -1,4 +1,5 @@
using System.Reactive; using System;
using System.Reactive;
using System.Reactive.Linq; using System.Reactive.Linq;
using Flawless.Client.Service; using Flawless.Client.Service;
using ReactiveUI; using ReactiveUI;
@ -12,11 +13,22 @@ public partial class MainWindowViewModel : ViewModelBase, IScreen
public ReactiveCommand<Unit, IRoutableViewModel> GoBackCommand => Router.NavigateBack; public ReactiveCommand<Unit, IRoutableViewModel> GoBackCommand => Router.NavigateBack;
[Reactive] private bool _requireLogin = true;
public MainWindowViewModel() public MainWindowViewModel()
{ {
Api.Current.IsLoggedIn.Select(x => !x).BindTo(this, vm => vm.RequireLogin); #pragma warning disable VSTHRD110
Api.Current.IsLoggedIn.Subscribe(login =>
{
if (login)
{
Console.WriteLine("Enter main page");
Router.Navigate.Execute(new LoginViewModel(this));
}
else
{
Console.WriteLine("Require login again");
Router.NavigateAndReset.Execute(new ServerConnectViewModel(this));
}
});
#pragma warning restore VSTHRD110
} }
} }

View File

@ -10,9 +10,13 @@ using Ursa.ReactiveUIExtension;
namespace Flawless.Client.ViewModels; namespace Flawless.Client.ViewModels;
public partial class ServerConnectViewModel : ViewModelBase, IScreen public partial class ServerConnectViewModel : ViewModelBase, IScreen, IRoutableViewModel
{ {
public RoutingState Router { get; } = new RoutingState(); public string? UrlPathSegment { get; } = Guid.NewGuid().ToString();
public IScreen HostScreen { get; }
public RoutingState Router { get; } = new();
public ReactiveCommand<Unit, IRoutableViewModel> GoBackCommand => Router.NavigateBack; public ReactiveCommand<Unit, IRoutableViewModel> GoBackCommand => Router.NavigateBack;
@ -25,8 +29,9 @@ public partial class ServerConnectViewModel : ViewModelBase, IScreen
if (Api.Current.RequireRefreshToken()) await Router.NavigateAndReset.Execute(new ServerSetupViewModel(this)).ToTask(); if (Api.Current.RequireRefreshToken()) await Router.NavigateAndReset.Execute(new ServerSetupViewModel(this)).ToTask();
} }
public ServerConnectViewModel() public ServerConnectViewModel(IScreen hostScreen)
{ {
HostScreen = hostScreen;
Router.CurrentViewModel Router.CurrentViewModel
.Select(vm => vm?.GetType().Name.Replace("ViewModel", string.Empty) ?? "Hello") .Select(vm => vm?.GetType().Name.Replace("ViewModel", string.Empty) ?? "Hello")
.BindTo(this, vm => vm.Title); .BindTo(this, vm => vm.Title);

View File

@ -1,10 +1,12 @@
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Flawless.Client.ViewModels;
using Ursa.ReactiveUIExtension;
namespace Flawless.Client.Views; namespace Flawless.Client.Views;
public partial class MainView : UserControl public partial class MainView : ReactiveUrsaView<MainViewModel>
{ {
public MainView() public MainView()
{ {

View File

@ -19,8 +19,7 @@
</Design.DataContext> </Design.DataContext>
<Panel> <Panel>
<views:ServerConnectView IsVisible="{Binding !!RequireLogin, Mode=OneWay}"/> <rxui:RoutedViewHost Router="{Binding Router}"/>
<views:MainView IsVisible="{Binding !RequireLogin, Mode=OneWay}"/>
<ursa:OverlayDialogHost/> <ursa:OverlayDialogHost/>
</Panel> </Panel>
</ursa:UrsaWindow> </ursa:UrsaWindow>

View File

@ -8,7 +8,7 @@
x:Class="Flawless.Client.Views.ServerConnectView" x:Class="Flawless.Client.Views.ServerConnectView"
x:DataType="vm:ServerConnectViewModel"> x:DataType="vm:ServerConnectViewModel">
<Border Classes="Shadow" Theme="{StaticResource CardBorder}" MaxWidth="400" MaxHeight="400"> <Border Classes="Shadow" Theme="{StaticResource CardBorder}" Width="400" Height="400">
<DockPanel> <DockPanel>
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" VerticalAlignment="Center" Spacing="18"> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" VerticalAlignment="Center" Spacing="18">
<Button Command="{Binding GoBackCommand}" <Button Command="{Binding GoBackCommand}"

View File

@ -2,14 +2,14 @@
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using Flawless.Client.ViewModels; using Flawless.Client.ViewModels;
using Ursa.ReactiveUIExtension;
namespace Flawless.Client.Views; namespace Flawless.Client.Views;
public partial class ServerConnectView : UserControl public partial class ServerConnectView : ReactiveUrsaView<ServerConnectViewModel>
{ {
public ServerConnectView() public ServerConnectView()
{ {
InitializeComponent(); InitializeComponent();
DataContext = new ServerConnectViewModel();
} }
} }