ホームページ >バックエンド開発 >C++ >MVVM データ バインディングを使用して TabControl を ViewModel のコレクションにバインドするにはどうすればよいですか?

MVVM データ バインディングを使用して TabControl を ViewModel のコレクションにバインドするにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-14 08:50:42244ブラウズ

How to Bind a TabControl to a Collection of ViewModels using MVVM Data Binding?

MVVM データ バインディング: ViewModel コレクションを使用して TabControl

をバインドします

MVVM (Model-View-ViewModel) アーキテクチャでは、ViewModel が UI 要素を直接作成すべきではありません。代わりに、データ モデルを公開し、ビューのバインディングを提供する必要があります。 TabControl を ViewModel コレクションにバインドするには、別のアプローチが必要です。

タブ ページのモックアップを作成する

タイトルとコンテンツのプロパティを含む、各タブ ページを表すモデル クラスを実装します。例:

<code class="language-csharp">public sealed class TabItem
{
    public string Header { get; set; }
    public string Content { get; set; }
}</code>

ObservableCollection を含む ViewModel

TabItem オブジェクトの ObservableCollection の ViewModel プロパティを作成します。コンストラクターで、このコレクションに最初のタブを設定します:

<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" });
    }
}</code>

XAML でのバインディング

XAML ウィンドウで、TabControl の ItemsSource を ViewModel の Tabs プロパティに設定します。

<code class="language-xml"><Window ... x:Class="WpfApplication12.MainWindow">
    <Window.DataContext>
        <viewmodel:ViewModel xmlns:viewmodel="clr-namespace:WpfApplication12"/>
    </Window.DataContext>
    <TabControl ... ItemsSource="{Binding Tabs}"/>
</Window></code>

タブコンテンツのデータテンプレート

各タブに異なるコンテンツを表示するには、TabControl の ContentTemplate プロパティのデータ テンプレートを使用します。

<code class="language-xml"><TabControl ...>
    <TabControl.ItemTemplate>
        <DataTemplate>
            ...
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <myusercontrol:MyUserControl xmlns:myusercontrol="clr-namespace:WpfApplication12"/>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl></code>

このアプローチを使用すると、MVVM の原則を維持しながら、TabControl を動的に作成し、それを ViewModel コレクションにバインドできます。

以上がMVVM データ バインディングを使用して TabControl を ViewModel のコレクションにバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。