*** Deployment Notes ***
The application is deployed on Dia in /home/pi/Boneyard/PortfolioManager/publish

1) dotnet clean
2) dotnet build
3) dotnet publish -r linux-arm64 
4) Backup/Remove the /home/pi/Boneyard/PortfolioManager/publish folder on Dia
4) copy the C:\Avalonia\PortfolioManager\bin\Release\net8.0\linux-arm64\publish folder to Dia /home/pi/Boneyard/PortfolioManager/publish

************************


vscode settings are in C:\Users\skess\AppData\Roaming\Code\User/settings.json


dotnet new avalonia.window -na EditPositionDialog -n PortfolioManager.Dialog
dotnet new avalonia.usercontrol -na [namespace] -n [name]

From Views Folder....
dotnet new avalonia.usercontrol -na  MomentumView -n PortfolioManager.Views 

dotnet new avalonia.usercontrol -na  GainLossView -n PortfolioManager.Views 


editor.inlineSuggest.enabled


dotnet new avalonia.window -na EditPositionDialog -n PortfolioManager.Dialogs
dotnet new avalonia.window -na EditPositionDialogNoStop -n PortfolioManager.Dialogs

1) Install dotnet 8.0 sdk   (C:\download\dotnetcore\dotnet-sdk-8.0.409-win-x64.exe)
   https://dotnet.microsoft.com/en-us/download/dotnet/8.0

2) Install Avalonia for VSCode extension

3) dotnet new install Avalonia.Templates

4) dotnet new avalonia.mvvm -o MyApp

5) in order to target Linux you need to publish to that target (i.e.) dotnet publish -r linux-arm64  

Skip
6) dotnet add package HyperText.Avalonia

  Skip
7) dotnet add package Avalonia.Labs.CommandManager --version 11.2.0

8) dotnet add package Avalonia.Controls.DataGrid

skip 
9) dotnet add package Avalonia.Skia.Linux.Natives --version <version_number>
For Avalonia applications targeting .NET 8 on Linux, you'll need Avalonia.Skia.Linux.Natives version 11.3.0. This version is designed to work with the latest Avalonia framework, which is 11.3.0. The other components, like SkiaSharp and its native assets, should also be at version 2.88.9 or higher for optimal compatibility, as per the documentation. 

Skip
10) dotnet add package SkiaSharp.NativeAssets.Linux.NoDependencies

11) Add this to the project file in order to get the correct version of libSkiaSharp.so
  <!-- Have to copy this shared library manually because publish was deploying an incorrect version of it  
       that was not running on the pi -->
  <ItemGroup>
  <None Update="libSkiaSharp.so">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
  </ItemGroup>

Skip
  12) SkiaSharp.Views

  13) add package Avalonia.Attached


14) vscode preferences -> settings ->  terminal.integrated.copyOnSelection  -> check the box

15) Avalonia Cartesian Chart
https://eremexcontrols.net/articles/controls/charts/get-started-with-charts-mvvm.html
https://eremexcontrols.net/articles/get-started/create-new-avalonia-project-using-avalonia-templates.html
https://www.eremexcontrols.net/articles/controls/charts/cartesian-series-views/line-series-vew.html
https://eremexcontrols.net/articles/controls/charts/get-started-with-charts.html
https://eremexcontrols.net/articles/controls/charts/cartesian-series-views/line-series-vew.html




dotnet add package Eremex.Avalonia.Controls
dotnet add package Eremex.Avalonia.Themes.DeltaDesign 

In App.axaml Replace

<Application xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="PortfolioManager.App"
             xmlns:local="using:PortfolioManager"
             RequestedThemeVariant="Default"
             >


with
<Application 
  xmlns="https://github.com/avaloniaui"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="PortfolioManager.App"
  xmlns:local="using:PortfolioManager"
  xmlns:theme="clr-namespace:Eremex.AvaloniaUI.Themes.DeltaDesign;assembly=Eremex.Avalonia.Themes.DeltaDesign"
  RequestedThemeVariant="Light">

16) dotnet add package LoadingIndicators.Avalonia --version 11.0.11.1
https://www.nuget.org/packages/LoadingIndicators.Avalonia


17) Creating Dialogs in Avalonia
https://www.google.com/search?client=firefox-b-1-d&q=how+to+create+a+simple+dialog+in+avalonia


18) dotnet add package Avalonia.ReactiveUI

Also Replace 

   <Application.Styles>
        <FluentTheme />
        <StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/>
    </Application.Styles>


with

    <Application.Styles>
        <theme:DeltaDesignTheme/>
        <!-- .... -->
    </Application.Styles>





dotnet new avalonia.usercontrol -na [namespace] -n [name]
dotnet new avalonia.window -na [namespace] -n [name]

dotnet new avalonia.window -na EditPositionDialog -n PortfolioManager.Dialog


https://github.com/AvaloniaUI/avalonia-dotnet-templates

RelayCommands
https://stackoverflow.com/questions/77978828/fire-relaycommand-from-datagrid-with-avaloniaui-and-community-toolkit-mvvm




To install SkiaSharp native assets for ARM64, you'll need to ensure your project is set up to target the correct runtime identifier (RID) and then add the necessary NuGet packages. Specifically, you'll want to use the linux-arm64 RID and install the SkiaSharp native assets packages for Linux and specifically those without dependencies. 
Here's a step-by-step guide:

    Set the target framework and RID:
        In your project file (e.g., MyProject.csproj), add or modify the <TargetFramework> and <RuntimeIdentifier> elements:

Code

        <TargetFramework>net7.0</TargetFramework>  <!-- Or your target framework -->
        <RuntimeIdentifier>linux-arm64</RuntimeIdentifier>

    1. Install the SkiaSharp native assets packages:
        Use the NuGet Package Manager to install the following packages:
            SkiaSharp.NativeAssets.Linux (or SkiaSharp.NativeAssets.Linux.NoDependencies if you prefer to not depend on external font config packages). 

If you're using a custom runtime, you might also need SkiaSharp.NativeAssets.Linux.NoDependencies or SkiaSharp.NativeAssets.Linux. 

2. Build and test:

    Build your project and ensure that it compiles and runs correctly on your ARM64 target.
    You may need to adjust your Dockerfile or other deployment configuration to include the necessary Linux packages if using SkiaSharp.NativeAssets.Linux. 

Important considerations:

    Dependencies:
    If you choose SkiaSharp.NativeAssets.Linux, ensure your container or deployment environment has the necessary libraries (e.g., libfontconfig1, libGLX, etc.). 

Linux Distributions:
If you're targeting a specific Linux distribution, you might need to adjust the RID accordingly (e.g., linux-musl-arm64 for Alpine Linux). 
Containers:
If you're running your application in a container, you'll need to include the SkiaSharp native assets within the container image. 
VS Code:
If you're using VS Code and are deploying a container, make sure the workspace is in the container and that you can see the full file system structure of the container. 

By following these steps, you can successfully install and use SkiaSharp's native assets on your ARM64 target


      // https://stackoverflow.com/questions/7929646/how-to-programmatically-select-a-tabitem-in-wpf-tabcontrol



       <DataGrid>

        <Interaction.Behaviors>
          <EventTriggerBehavior EventName="SelectionChanged">
            <InvokeCommandAction Command="{Binding SelectionChangedCommand}"></InvokeCommandAction>
          </EventTriggerBehavior>
        </Interaction.Behaviors>
        
        ...
 </DataGrid>

                 <DataGrid.Styles>
                  <Style Selector="DataGridRow:selected">
                      <Setter Property="FontWeight" Value="Bold" />
                      <Setter Property="Foreground" Value="Black" />
                      <Setter Property="Background" Value="White" />
                      <Setter Property="Opacity" Value=".50" />
                  </Style>
                 </DataGrid.Styles>                


Install the ScottPlot.Avalonia NuGet package: This package provides the necessary components to integrate ScottPlot plots into your Avalonia application.
Import the ScottPlot.Avalonia namespace: Add this namespace to your window element in your Avalonia application.
Add an AvaPlot control: Add an AvaPlot element to your layout in your Avalonia application, giving it a unique name.
Plot your data: Use the AvaPlot control to display your data and create various plot types, such as line plots, scatter plots, bar charts, and more. 

https://scottplot.net/quickstart/avalonia/

1) dotnet add package ScottPlot.Avalonia