Aplikasi WinUI 3 berjalan lancar dalam mode Debug, namun mengalami kerusakan saat dikompilasi untuk rilis. Berikut adalah pesan kesalahan yang muncul.

Saya jarang menjumpai masalah aneh seperti ini dalam pengembangan biasa. WinUI 3 umumnya menampilkan pengecualian runtime internal, sehingga sulit untuk menemukan petunjuk bermanfaat dari tumpukan pengecualian.
Setelah beberapa putaran pengujian penyaringan, saya menemukan bahwa kerusakan dipicu oleh referensi kosong saat menginisialisasi ViewModel di dalam sebuah halaman. Berikut struktur proyek: satu jendela utama dengan menu navigasi samping. Menyentuh item menu akan memuat halaman tujuan ke area konten utama di sebelah kanan. Jendela utama menggunakan potongan kode XAML berikut:
<TabView Name="tabView" IsAddTabButtonVisible="False" Margin="10" VerticalAlignment="Stretch" TabCloseRequested="TabView_TabCloseRequested">
<TabViewItem x:Uid="tabConsonant" Name="tvHome">
</TabViewItem>
</TabView>Code language: HTML, XML (xml)
Kontrol TabView ini menampung halaman konten di sisi kanan. Saya menetapkan instansi halaman tujuan ke tvHome melalui kode bagian belakang:
private void MainWindow_Activated(object sender, WindowActivatedEventArgs args)
{
tvHome.Content = new ConsonantsPage();
}Code language: JavaScript (javascript)
Pemantapan lebih lanjut mengonfirmasi bahwa kerusakan terjadi tepat pada baris kode this.DataContext = vm; di dalam halaman tujuan.

Kemudian saya menguji halaman baru yang bersih tanpa DataContext dan pengikatan data sama sekali, halaman tersebut berhasil dimuat tanpa kesalahan. Jadi penyebab utama jelas berkaitan dengan logika pengikatan XAML. Daripada terus menggunakan pengikatan MVVM standar, saya beralih membuat elemen antarmuka secara pemrograman langsung di kode bagian belakang sebagai solusi sementara.
Solusi perbaikan akhir yang berfungsi:
Buat semua kontrol dan lakukan pengikatan nilai sepenuhnya menggunakan kode C# bagian belakang:
public TonePage()
{
InitializeComponent();
Loaded += Page_Loaded;
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
var toneData = ThaiAlphabetSource.Tones;
FillToneGrid(gvToneList, toneData);
}
private void FillToneGrid(GridView grid, List<ToneInfo> source)
{
foreach (var item in source)
{
Button btnRoot = new Button
{
HorizontalContentAlignment = HorizontalAlignment.Center,
VerticalContentAlignment = VerticalAlignment.Center,
Tag = item.Audio
};
btnRoot.Click += PlayClick;
StackPanel sp = new StackPanel
{
Width = 240,
Orientation = Orientation.Vertical,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
TextBlock tbTitle = new TextBlock
{
HorizontalContentAlignment = HorizontalAlignment.Center,
FontSize = 50,
Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0x01, 0xA0, 0xC7)),
Text = item.Letter_Title
};
TextBlock tbName = new TextBlock
{
HorizontalContentAlignment = HorizontalAlignment.Center,
FontSize = 30,
Text = item.Letter_Name
};
TextBlock tbScript = new TextBlock
{
HorizontalContentAlignment = HorizontalAlignment.Center,
FontSize = 30,
Text = item.Letter_Script
};
sp.Children.Add(tbTitle);
sp.Children.Add(tbName);
sp.Children.Add(tbScript);
btnRoot.Content = sp;
grid.Items.Add(btnRoot);
}
}Code language: PHP (php)
Saya tidak melakukan penelitian mendalam untuk menemukan kesalahan mendasar yang tepat, namun saya menduga masalah berasal dari sintaks pengikatan perintah seperti Command="{Binding PlayCommand}". Dugaan ini didukung oleh kasus pengujian lain: halaman yang hanya menggunakan pengikatan properti biasa tanpa pengikatan perintah berjalan dengan lancar, seperti contoh di bawah ini:
<Button Content="{Binding}" Grid.Row="0" Grid.Column="1" BorderBrush="#ccc" Foreground="Black" FontSize="50" Height="100" Width="130" Click="Button_Click"/>Code language: HTML, XML (xml)
Cara penulisan ini berfungsi normal dalam konfigurasi rilis.