廢話不說,直接上代碼後端
using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Controls; using System.Windows.Markup; namespace L2_Core_LoadXaml { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public class VM : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void RaisePropertyChanged([CallerMemberName] string propertyName = "") { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } private string _A; public string A { get => _A; set { _A = value; RaisePropertyChanged(); } } } public MainWindow() { InitializeComponent(); this.DataContext = new VM() { A = "Hello" }; this.Loaded += MainWindow_Loaded; } private void MainWindow_Loaded(object sender, RoutedEventArgs e) { string xaml = @" <Grid xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> <Button Name=""Button1"" Content=""{Binding A}""></Button> </Grid > "; var rootElement = (DependencyObject)XamlReader.Parse(xaml); this.Content = rootElement; Button button1 = (Button)LogicalTreeHelper.FindLogicalNode(rootElement, "Button1"); button1.Click += (o, e) => MessageBox.Show("Xaml loaded!"); } } }
有了這玩意,彷佛打開了一扇窗——先後端真正分離?this