Dalam seni bina MVVM, adalah penting untuk mengekalkan pemisahan yang jelas antara pandangan dan model. Oleh itu, model tidak seharusnya bertanggungjawab untuk mencipta item paparan sebenar. Ini menimbulkan persoalan: Bagaimana untuk memuatkan dan mengikat kandungan tab secara dinamik pada ViewModel yang sepadan sambil mematuhi prinsip MVVM?
Kunci kepada penyelesaian adalah untuk mengikat sifat ItemsSource TabControl kepada ObservableCollection objek TabItem. Setiap TabItem merangkum tajuk tab dan maklumat kandungan. Koleksi ini harus diisi dalam ViewModel utama anda.
<code class="language-csharp">public sealed class ViewModel { public ObservableCollection<TabItem> Tabs { get; set; } public ViewModel() { Tabs = new ObservableCollection<TabItem>(); Tabs.Add(new TabItem { Header = "One", Content = "One's content" }); Tabs.Add(new TabItem { Header = "Two", Content = "Two's content" }); } } public sealed class TabItem { public string Header { get; set; } public string Content { get; set; } }</code>
Dalam XAML aplikasi anda, anda boleh mengikat ItemsSource TabControl ke koleksi Tab dalam ViewModel. Selain itu, anda boleh menentukan DataTemplates untuk menentukan penampilan tajuk tab dan kandungan tab.
<code class="language-xml"><Window.DataContext> <viewmodel:ViewModel xmlns:viewmodel="clr-namespace:WpfApplication12"/> </Window.DataContext> <TabControl ItemsSource="{Binding Tabs}"> <TabControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Header}"/> </DataTemplate> </TabControl.ItemTemplate> <TabControl.ContentTemplate> <DataTemplate> <TextBlock Text="{Binding Content}"/> </DataTemplate> </TabControl.ContentTemplate> </TabControl></code>
Jika anda perlu memaparkan jenis Kandungan yang berbeza dalam tab yang berbeza, anda boleh menggunakan DataTemplates untuk membezakan TabItem ViewModels yang berbeza. Pendekatan ini memastikan bahawa setiap tab memaparkan UserControl dan data yang sesuai.
Dengan mengguna pakai prinsip MVVM di atas, anda boleh mengikat TabControl dengan berkesan kepada koleksi ViewModel, membolehkan pemuatan dinamik dan pengikatan kandungan tab sambil mengekalkan pemisahan kebimbangan yang jelas.
Atas ialah kandungan terperinci Bagaimana untuk Mengikat TabControl secara Dinamik ke Koleksi ViewModels dalam MVVM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!