Avalonia'yı duyduğumda, sanki uzun süredir kayıp olan WPF kardeşimi bulmuş gibi hissettim. XAML, binding, MVVM... Hepsi tanıdık geldi. "Artık Linux ve macOS için de tek kod tabanından desktop app yazabilirim!" diye sevinçten havaya uçtum. Hemen bir test projesi açtım, VS Code'u yanıma aldım ve dalmaya hazırdım. Meğerse macera yeni başlıyormuş.
İlk Adımlar ve "Bu Çok Tanıdık" Hissi
Gerçekten de WPF'de yaptığın her şeyi neredeyse aynı mantıkla yapabiliyorsun. Bir TextBox bind etmek, bir Command tanımlamak... Hepsi aşina. Hatta biraz daha modern ve temiz geldi bana. Cross-platform derleme yapıp, tek bir .NET binary'sinin hem Windows'ta hem de Linux'ta çalıştığını görmek inanılmaz keyifliydi.
Gördün mü? Neredeyse MVVM Toolkit'le aynı. Hiç yabancılık çekmedim.
Sorun Nerede? "Stack'te Cevap Yok Abi!"
İşler, basit bir örnekten çıkıp gerçek bir ihtiyaca dönüştüğümde karardı. Diyelim ki ListView'inde item'ların rengini koşula göre değiştirmek istiyorsun. WPF'de DataTrigger veya Converter yazarsın, binlerce kaynak vardır. Avalonia'da ise... IValueConverter interface'i farklı bir namespace'te! DataTrigger yok, onun yerine DataTrigger benzeri ama syntax'ı farklı bir yapı var.
Sorun şu: Google'a "avalonia listview item background color binding" yazdığında çıkan sonuç sayısı, WPF'dekinin yanında komik kalıyor. StackOverflow'da sorulmuş 3-5 soru var, belki biri çözülmüş. GitHub issues'ları karıştırmak, Discord sunucusunda mesajın kaybolup gitmesini umarak sormak zorunda kalıyorsun. Community küçük olduğu için, "acayip" sayılmayan senin sorunun, daha önce kimse tarafından detaylıca dokumente edilmemiş olabiliyor.
Çözüm? Kendi Çözümünü Kendin Üretmek
Bu durum seni ister istemez daha güçlü kılıyor. Kaynak koda dalıp bakmayı, kendi Converter'ını veya Behavior'ını yazmayı, basit bir kontrolü kendin extend etmeyi öğreniyorsun. WPF'de hazır bulduğun ve hiç düşünmediğin onlarca detayla burada yüzleşiyorsun. Zorlayıcı ama öğretici.
Yani özetle, araç harika, vaatler gerçek. Ama yola çıkarken yanınıza sadece temel dokümanları değil, biraz da "maceracı ruhunuzu" almanız gerekiyor. WPF'deki gibi her türlü sorunuzun cevabının 1 click uzakta olmayacağını kabul etmelisiniz.
Peki ya siz? Cross-platform desktop için Avalonia, MAUI veya başka bir framework mü kullanıyorsunuz? Özellikle Avalonia'da takıldığınız ve çözümünü bulmakta zorlandığınız bir nokta oldu mu? Gelin fikirleri katalize edelim!
Gerçekten de WPF'de yaptığın her şeyi neredeyse aynı mantıkla yapabiliyorsun. Bir TextBox bind etmek, bir Command tanımlamak... Hepsi aşina. Hatta biraz daha modern ve temiz geldi bana. Cross-platform derleme yapıp, tek bir .NET binary'sinin hem Windows'ta hem de Linux'ta çalıştığını görmek inanılmaz keyifliydi.
C#:
public class MainViewModel : ViewModelBase
{
private string _greeting = "Hello Avalonia!";
public string Greeting
{
get => _greeting;
set => this.RaiseAndSetIfChanged(ref _greeting, value);
}
}
Gördün mü? Neredeyse MVVM Toolkit'le aynı. Hiç yabancılık çekmedim.
İşler, basit bir örnekten çıkıp gerçek bir ihtiyaca dönüştüğümde karardı. Diyelim ki ListView'inde item'ların rengini koşula göre değiştirmek istiyorsun. WPF'de DataTrigger veya Converter yazarsın, binlerce kaynak vardır. Avalonia'da ise... IValueConverter interface'i farklı bir namespace'te! DataTrigger yok, onun yerine DataTrigger benzeri ama syntax'ı farklı bir yapı var.
Sorun şu: Google'a "avalonia listview item background color binding" yazdığında çıkan sonuç sayısı, WPF'dekinin yanında komik kalıyor. StackOverflow'da sorulmuş 3-5 soru var, belki biri çözülmüş. GitHub issues'ları karıştırmak, Discord sunucusunda mesajın kaybolup gitmesini umarak sormak zorunda kalıyorsun. Community küçük olduğu için, "acayip" sayılmayan senin sorunun, daha önce kimse tarafından detaylıca dokumente edilmemiş olabiliyor.
Bu durum seni ister istemez daha güçlü kılıyor. Kaynak koda dalıp bakmayı, kendi Converter'ını veya Behavior'ını yazmayı, basit bir kontrolü kendin extend etmeyi öğreniyorsun. WPF'de hazır bulduğun ve hiç düşünmediğin onlarca detayla burada yüzleşiyorsun. Zorlayıcı ama öğretici.
XML:
<ListBox Items="{Binding MyItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Background="{Binding MyProperty, Converter={x:Static local:MyColorConverter.Instance}}">
<TextBlock Text="{Binding Name}"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Yani özetle, araç harika, vaatler gerçek. Ama yola çıkarken yanınıza sadece temel dokümanları değil, biraz da "maceracı ruhunuzu" almanız gerekiyor. WPF'deki gibi her türlü sorunuzun cevabının 1 click uzakta olmayacağını kabul etmelisiniz.
Peki ya siz? Cross-platform desktop için Avalonia, MAUI veya başka bir framework mü kullanıyorsunuz? Özellikle Avalonia'da takıldığınız ve çözümünü bulmakta zorlandığınız bir nokta oldu mu? Gelin fikirleri katalize edelim!