vscode에서 기본으로 시작하는 경우 mvvm까지 진입하는 과정을 설명한다.
물론 초기 스케폴딩이 알아서 다 해주지만 초기 진입에 대한 이해가 부족하면
나중에 힘들어진다.
그래서 아발로니아 프로젝트를
dotnet new avalonia.mvvm -o [프로젝트이름] 가 아닌
dotnet new avalonia.app -o [프로젝트이름] 으로 시작한 경우 스케폴딩을 처리
1. dotnet add package CommunityToolkit.Mvvm
으로 mvvm 툴킷 설치하기.. 그리고 로거와 DI도 설치하기
으로 mvvm 툴킷 설치하기.. 그리고 로거와 DI도 설치하기
dotnet add package Microsoft.Extensions.Logging
dotnet add package Microsoft.Extensions.DependencyInjection
2. ViewModels폴더를 생성하고 그아래 ViewModelBase.cs 클래스를 만들어서
ObservableObject를 상속 받기 그리고 MainWindowViewModel.cs만들어서
ViewModelBase를 상속 받기
ViewModelBase를 상속 받기
3. App.axaml.cs 의 OnFrameworkInitializationCompleted에서
AppLoad(); 함수 만들고 그 함수안에서 DI처리
//App 클래스 멤버로 다음을 선언 -> public static IserviceProvider Service { get; private set; } = default!;
// AppLoad 함수안 (로거추가와 어트리뷰트 처리는 다음포스트 참조)
var service_col = new ServiceCollection();
service_col.AddLogging(builder =>
{
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddProvicer(new FileLoggerProvider(AppContext.BaseDirectory));
});
service_col.AddConventionBasedServices();
Service = service_col.BuildServiceProvider();
//추가 초기화를 이어갈것~
4. OnFrameworkInitializationCompleted 함수 안 AppLoad() 다음줄을 다음처럼 설정
하여 메인뷰와 그에따른 DataContext를 바인딩처리
//메인윈도우설정
if (ApplicationLifttime is IClassicDestopStyleApplicationLifetime desktop)
if (ApplicationLifttime is IClassicDestopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainView()
{
DataContext = Service.GetRequiredService<MainViewModel>()
};
}
base.OnFrameworkInitializationCompleted();
5. 뷰로케이터 만들기 (뷰로케이터는 DataContext가지고 역으로 뷰템플릿을 꼽아주는 역할)
ViewLoactor.cs를 root폴더에 만들고 다음과 같이 작성
6. 프로젝트명.csproj 파일에 아발로니아 리소스 경로추가
<ItemGroup>
<AvaloniaResource Include="Assets\**" />
</ItemGroup>
7. App.axaml 파일에서 초기 스타일 명시 (테마는 기본쓸꺼면 FluentTheme 를 다른거로 변경)
<!-- 어플리케이션 스타일 -->
<Application.Styles>
<FluentTheme />
<StyleInclude Source="Style/AppDefaultStyle.axaml"></StyleInclude>
</Application.Styles>
8. 초기 폰트를 바인딩 처리 (여기서는 NotoSansKR로 예시)
Assets/Fonts 폴더에 NotoSansKR-Bold.ttf, NotoSansKR-Regular.ttf 복사
App.axaml 파일에서 사용할 폰트추가
<!-- 어플리케이션 리소스들 -->
<Application.Resources>
<!-- 사용할 폰트 -->
<FontFamily x:Key="NotoSansKR">/Assets/Fonts/NotoSansKR-Regular.ttf#Noto Sans KR</FontFamily>
<FontFamily x:Key="NotoSansKRBold">/Assets/Fonts/NotoSansKR-Bold.ttf#Noto Sans KR</FontFamily>
</Application.Resources>
9 .위처럼 설정하고 모든 윈도우는 해당 폰트를 따르도록 설정 다시 AppDefaultStyle.axaml 파일에서 윈도우와 유저컨트롤을 정의
<Style Selector="Window">
<Setter Property="FontFamily" Value="{DynamicResource NotoSansKR}"></Setter>
</Style>
<Style Selector="UserControl">
<Setter Property="FontFamily" Value="{DynamicResource NotoSansKR}"></Setter>
</Style>
※ 프로젝트 작업중 UserControl을 생성할때 axaml과 cs파일이 함깨 생성되는데 이때
axaml파일의 인코딩이 ANSI가 되는 경우가 있다 이경우는 이파일에다가 대고 직접적으로
한글을 적는 리터럴 형태인경우에는 한글 깨짐 현상이 있을수 있으니 이 axaml파일을 초기에
다른이름으로 저장하여 인코딩을 변경하여 저장할수 있도록 해야한다. ※
axaml파일의 인코딩이 ANSI가 되는 경우가 있다 이경우는 이파일에다가 대고 직접적으로
한글을 적는 리터럴 형태인경우에는 한글 깨짐 현상이 있을수 있으니 이 axaml파일을 초기에
다른이름으로 저장하여 인코딩을 변경하여 저장할수 있도록 해야한다. ※
댓글 없음:
댓글 쓰기