Avalonia UI 11 Preview 5

* Menu fixes for macOS.
* Delete nuget.config.
* Nullable enabled.
* Fixes in ViewModel class names.
* ViewModel for MainControl as MainWindow state.
* Preserve window state when swapping Fluent and Simple themes.
This commit is contained in:
Joseph Moreno
2023-02-07 23:34:30 -05:00
parent b492413a12
commit defcc0b360
16 changed files with 182 additions and 127 deletions

View File

@ -2,11 +2,11 @@
xmlns:viewModels="clr-namespace:AvaloniaCoreRTDemo.Controls.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaCoreRTDemo.Controls.MainControl"
x:CompileBindings="True"
x:DataType="viewModels:MainViewModel">
x:DataType="viewModels:MainControlViewModel">
<Grid ColumnDefinitions="*,*" RowDefinitions="Auto,Auto,*" Margin="32">
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" TextAlignment="Center" Margin="0,6">Welcome to Avalonia UI + NativeAOT!</TextBlock>
<Image Grid.Row="1" Grid.Column="0" Stretch="None" Source="{Binding DotNetImage}"/>
<Image Grid.Row="1" Grid.Column="1" Stretch="None" Source="{Binding AvaloniaImage}"/>
<TextBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Watermark="Type here" AcceptsReturn="True" TextWrapping="Wrap"/>
<TextBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Watermark="Type here" AcceptsReturn="True" TextWrapping="Wrap" Text="{Binding Text}"/>
</Grid>
</UserControl>

View File

@ -9,13 +9,19 @@ namespace AvaloniaCoreRTDemo.Controls
{
public MainControl()
{
InitializeComponent();
this.InitializeComponent();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
this.DataContext = new MainViewModel();
this.DataContext = new MainControlViewModel();
}
public void Reload(IMainWindowState? model)
{
if(model is not null)
this.DataContext = new MainControlViewModel(model);
}
}
}

View File

@ -0,0 +1,49 @@
using System;
using System.IO;
using Avalonia.Media.Imaging;
using AvaloniaCoreRTDemo.Interfaces;
using ReactiveUI;
namespace AvaloniaCoreRTDemo.Controls.ViewModels
{
internal sealed class MainControlViewModel : ReactiveObject, IMainWindowState
{
private readonly IBitmap _dotNetImage;
private readonly IBitmap _avaloniaImage;
private Boolean _unloadable = false;
public IBitmap DotNetImage => this._dotNetImage;
public IBitmap AvaloniaImage => this._avaloniaImage;
public String? Text { get; set; }
public MainControlViewModel()
{
this._dotNetImage = Utilities.GetImageFromFile("dotnet.png");
this._avaloniaImage = Utilities.GetImageFromFile("avalonia.png");
}
public MainControlViewModel(IMainWindowState state)
{
this._avaloniaImage = state.AvaloniaImage;
this._dotNetImage = state.DotNetImage;
this.Text = state.Text;
state.SetUnloadable();
}
~MainControlViewModel()
{
if (!this._unloadable)
{
this._dotNetImage.Dispose();
this._avaloniaImage.Dispose();
}
}
void IMainWindowState.SetUnloadable()
{
this._unloadable = true;
}
}
}

View File

@ -1,31 +0,0 @@
using System;
using System.IO;
using Avalonia.Media.Imaging;
using ReactiveUI;
namespace AvaloniaCoreRTDemo.Controls.ViewModels
{
internal sealed class MainViewModel : ReactiveObject
{
private readonly IBitmap _dotNetImage;
private readonly IBitmap _avaloniaImage;
public IBitmap DotNetImage => this._dotNetImage;
public IBitmap AvaloniaImage => this._avaloniaImage;
public MainViewModel()
{
this._dotNetImage = Utilities.GetImageFromFile("dotnet.png");
this._avaloniaImage = Utilities.GetImageFromFile("avalonia.png");
}
~MainViewModel()
{
this._dotNetImage.Dispose();
this._avaloniaImage.Dispose();
}
}
}