рдЬрдм рд╣рдо рдПрдХ рдирдИ рднрд╛рд╖рд╛ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдо рдПрдХ рдирдИ рдпреВрдЖрдИ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдиреЛрдЯрдмреБрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдореИрдВ 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) рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдЖрд░реНрдо рджреЛрдиреЛрдВ рдкрд░ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╛рд╕реНрдкрд┐рдпрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдкреБрдирд╢реНрдЪ
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмреЗрд╣рдж рд░реЛрдЪрдХ рдФрд░ рд╕реБрдЦрдж рд╣реИред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓рдХреНрд╖рд┐рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдРрдкреНрдкрд▓ рд╡рд╛рд▓реЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдпрд╣ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред