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.themes.semi\1.10.0\lib\netstandard2.0\Ursa.Themes.Semi.dll" />
&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;
&lt;TestAncestor&gt;&#xD;
&lt;TestId&gt;MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&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;
&lt;TestId&gt;MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&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;
&lt;TestAncestor&gt;&#xD;
&lt;TestId&gt;MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit.PathValidationTest&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&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;
&lt;TestId&gt;MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit.PathValidationTest&lt;/TestId&gt;
&lt;/TestAncestor&gt;
&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 Flawless.Client.Service;
using ReactiveUI;
@ -11,12 +12,23 @@ public partial class MainWindowViewModel : ViewModelBase, IScreen
public RoutingState Router { get; } = new RoutingState();
public ReactiveCommand<Unit, IRoutableViewModel> GoBackCommand => Router.NavigateBack;
[Reactive] private bool _requireLogin = true;
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;
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;
@ -25,8 +29,9 @@ public partial class ServerConnectViewModel : ViewModelBase, IScreen
if (Api.Current.RequireRefreshToken()) await Router.NavigateAndReset.Execute(new ServerSetupViewModel(this)).ToTask();
}
public ServerConnectViewModel()
public ServerConnectViewModel(IScreen hostScreen)
{
HostScreen = hostScreen;
Router.CurrentViewModel
.Select(vm => vm?.GetType().Name.Replace("ViewModel", string.Empty) ?? "Hello")
.BindTo(this, vm => vm.Title);

View File

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

View File

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

View File

@ -8,7 +8,7 @@
x:Class="Flawless.Client.Views.ServerConnectView"
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>
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" VerticalAlignment="Center" Spacing="18">
<Button Command="{Binding GoBackCommand}"

View File

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