рдПрд╡рд▓реЛрдирд┐рдпрд╛: рдкрд╣рд▓реА рдмреИрдардХ

рдЬрдм рд╣рдо рдПрдХ рдирдИ рднрд╛рд╖рд╛ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдо рдПрдХ рдирдИ рдпреВрдЖрдИ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдиреЛрдЯрдмреБрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдореИрдВ AvaloniaUI Corps рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо GUI рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрддреА рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрд╡рд╢реНрдпрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рд╕рд╣реЗрдЬреЗрдВред

рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ:

dotnet new --install [   ] 

рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:

 dotnet new avalonia.mvvm -o Notebook 

MainWindow.xaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ wpf рдХреА рддрд░рд╣ рд╕рд╛рдзрд╛рд░рдг рдорд╛рд░реНрдХрдЕрдк рдЬреЛрдбрд╝реЗрдВред

 <Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="clr-namespace:Notebook.ViewModels;assembly=Notebook" Icon="resm:Notebook.Assets.avalonia-logo.ico" Title="Notebook"> <!--  --> <Window.KeyBindings> <KeyBinding Gesture="Ctrl+O" Command="{Binding Open}" /> <KeyBinding Gesture="Ctrl+S" Command="{Binding Save}" /> </Window.KeyBindings> <Design.DataContext> <vm:MainWindowViewModel /> </Design.DataContext> <!--  --> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!----> <Menu Grid.Row="0" Grid.Column="0"> <MenuItem Header="File"> <MenuItem Header="Open" Command="{Binding Open}" /> <MenuItem Header="Save As" Command="{Binding Save}" /> </MenuItem> </Menu> <!--  --> <TextBox Grid.Row="1" Grid.Column="0" Text="{Binding Data}" AcceptsReturn="True" /> </Grid> </Window> 

Mvvm рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдпрд╣рд╛рдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдПрдХреНрдЯрд┐рд╡рдпреВрдЖрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреЛ MainWindowViewModel.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЬреЛрдбрд╝реЗрдВ:

  private string _data; public string Data { get => _data; set => this.RaiseAndSetIfChanged(ref _data, value); } 


рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ wpf рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрд╡рд▓реЛрдирд┐рдпрд╛ рдЖрдкрдХреЛ рд╕реАрдзреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрдорд╛рдВрдб рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдФрд░ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╡рд╛рдж рдХреЗрд╡рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИрдВред
рдлрд┐рд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЦреЛрд▓рдиреЗ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
  public async Task Open() { var dialog = new OpenFileDialog(); string[] result = null; dialog.Filters.Add(new FileDialogFilter() {Name = "Text", Extensions = {"txt"}}); result = await dialog.ShowAsync(new Window()); if (result != null) { Data = File.ReadAllText(result.First()); } } 

рдФрд░ рдпрд╣рд╛рдБ рдмрдЪрд╛ рд╣реИ:

  public async Task Save() { var dialog = new SaveFileDialog(); dialog.Filters.Add(new FileDialogFilter() {Name = "Text", Extensions = {"txt"}}); var result = await dialog.ShowAsync(new Window()); if (result != null) { File.WriteAllText(result, Data); } } 

рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛: Avalonia.Skia.Linux.Nativesред

рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╕рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдПрдВ рд╣рдорд╛рд░реА рдЦрд┐рдбрд╝рдХреА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреАред рдЙрдмрдВрдЯреВ (рдореЗрдЯ рд╕рд╣рд┐рдд) рдмрдбрд╝реЗ (x64) рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдЖрд░реНрдо рджреЛрдиреЛрдВ рдкрд░ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╛рд╕реНрдкрд┐рдпрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред


рдкреБрдирд╢реНрдЪ

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмреЗрд╣рдж рд░реЛрдЪрдХ рдФрд░ рд╕реБрдЦрдж рд╣реИред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓рдХреНрд╖рд┐рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдРрдкреНрдкрд▓ рд╡рд╛рд▓реЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдпрд╣ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

Source: https://habr.com/ru/post/hi438920/


All Articles