次の方法で共有


FrameworkElement.DataContext プロパティ

定義

FrameworkElement のデータ コンテキストを取得または設定します。 データ コンテキストの一般的な用途は、 が {Binding} マークアップ拡張機能を使用し、データ バインディングに参加する場合FrameworkElementです。

public:
 property Platform::Object ^ DataContext { Platform::Object ^ get(); void set(Platform::Object ^ value); };
IInspectable DataContext();

void DataContext(IInspectable value);
public object DataContext { get; set; }
var object = frameworkElement.dataContext;
frameworkElement.dataContext = object;
Public Property DataContext As Object
<frameworkElement DataContext="binding"/>
- or -
<frameworkElement DataContext="{StaticResource keyedObject}"/>

プロパティ値

Object

Platform::Object

IInspectable

データ コンテキストとして使用するオブジェクト。

次の使用例は、 を DataContext カスタム クラスのインスタンスに直接設定します。

C++/WinRT{Binding} マークアップ拡張機能を使用している場合は、 プロパティと BindableAttribute を使用FrameworkElement::DataContextします。 {x:Bind} マークアップ拡張機能を使用している場合は、 も をBindableAttribute使用FrameworkElement::DataContextしません。

以下の C++/WinRT コード例の背景 (ファイル一覧の使用方法 .idl 、生成する実装ファイルの処理方法など) については、「 XAML コントロール;C++/WinRT プロパティへのバインド」を参照してください。

// MyColors.idl
namespace MyColorsApp
{
    [bindable]
    [default_interface]
    runtimeclass MyColors : Windows.UI.Xaml.Data.INotifyPropertyChanged
    {
        MyColors();
        Windows.UI.Xaml.Media.SolidColorBrush Brush1;
    }
}

// MyColors.h
#pragma once
#include "MyColors.g.h"
namespace winrt::MyColorsApp::implementation
{
    struct MyColors : MyColorsT<MyColors>
    {
        MyColors() = default;

        Windows::UI::Xaml::Media::SolidColorBrush Brush1();
        void Brush1(Windows::UI::Xaml::Media::SolidColorBrush const& value);
        winrt::event_token PropertyChanged(Windows::UI::Xaml::Data::PropertyChangedEventHandler const& handler);
        void PropertyChanged(winrt::event_token const& token) noexcept;

    private:
        Windows::UI::Xaml::Media::SolidColorBrush m_brush1{ nullptr };
        winrt::event<Windows::UI::Xaml::Data::PropertyChangedEventHandler> m_propertyChanged;
    };
}

namespace winrt::MyColorsApp::factory_implementation
{
    struct MyColors : MyColorsT<MyColors, implementation::MyColors>
    {
    };
}

// MyColors.cpp
#include "pch.h"
#include "MyColors.h"

namespace winrt::MyColorsApp::implementation
{
    Windows::UI::Xaml::Media::SolidColorBrush MyColors::Brush1()
    {
        return m_brush1;
    }

    void MyColors::Brush1(Windows::UI::Xaml::Media::SolidColorBrush const& value)
    {
        if (m_brush1 != value)
        {
            m_brush1 = value;
            m_propertyChanged(*this, Windows::UI::Xaml::Data::PropertyChangedEventArgs{ L"Brush1" });
        }
    }

    winrt::event_token MyColors::PropertyChanged(Windows::UI::Xaml::Data::PropertyChangedEventHandler const& handler)
    {
        return m_propertyChanged.add(handler);
    }

    void MyColors::PropertyChanged(winrt::event_token const& token) noexcept
    {
        m_propertyChanged.remove(token);
    }
}

<!-- MainPage.xaml-->
...
<TextBox x:Name="MyTextBox" Background="{Binding Brush1}"/>
...

// MainPage.h
...
#include "MyColors.h"
#include "MainPage.g.h"
...

// MainPage.cpp
#include "pch.h"
#include "MainPage.h"

using namespace winrt;
using namespace Windows::UI;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Media;

namespace winrt::MyColorsApp::implementation
{
    MainPage::MainPage()
    {
        InitializeComponent();

        // Create an instance of the MyColors class
        // which implements INotifyPropertyChanged.
        winrt::MyColorsApp::MyColors textcolor{ winrt::make<winrt::MyColorsApp::implementation::MyColors>() };

        // Set the Brush1 property value to a new SolidColorBrush
        // with the color Red.
        textcolor.Brush1(SolidColorBrush(Colors::Red()));

        // Set the DataContext of the TextBox named MyTextBox.
        MyTextBox().DataContext(textcolor);
    }
...
}
// Create an instance of the MyColors class 
// that implements INotifyPropertyChanged.
MyColors textcolor = new MyColors();

// Brush1 is set to be a SolidColorBrush with the value Red.
textcolor.Brush1 = new SolidColorBrush(Colors.Red);

// Set the DataContext of the TextBox MyTextBox.
MyTextBox.DataContext = textcolor;

注釈

データ コンテキスト は、オブジェクトがオブジェクト リレーションシップ階層内の連続する親オブジェクトからデータ バインディング情報を継承できる概念です。

データ コンテキストの最も重要な側面は、データ バインディングに使用されるデータ ソースです。 の一般的な用途 DataContext は、データ ソース オブジェクトに直接設定することです。 このデータ ソースは、ビジネス オブジェクトなどのクラスのインスタンスである可能性があります。 または、監視可能なコレクションとしてデータ ソースを作成して、データ コンテキストでバッキング コレクションの変更を検出できるようにします。 データ ソースがプロジェクトに含まれるライブラリによって定義されている場合、 の設定DataContextは、多くの場合、ResourceDictionary でキー付きリソースとしてデータ ソースをインスタンス化し、{StaticResource} マークアップ拡張参照を使用して XAML で をDataContext設定する場合と組み合わされます。

設定 DataContext のもう 1 つの方法は、 を呼び出 InitializeComponentした直後に、アプリ初期化ロジックの一部としてランタイム オブジェクト ツリーのルートに追加することです。 この手法については、「 データ バインディングの概要」を参照してください。

データ コンテキストでは、ソースの指定に加えて、データ ソースへのパスなど、バインド宣言の追加の特性を格納することもできます。

DataContext 設定すると、同じオブジェクト上の異なるプロパティの複数のバインドを共有データ コンテキストに設定するのに便利です。 ただし、 を未定義にし、必要なすべてのバインディング修飾を個別のバインド ステートメントに存在させるのは有効 DataContext です。

オブジェクト データ ソースの実装方法は、要件とプログラミング言語によって異なります。 詳しくは、「データ バインディングの詳細」をご覧ください。

C# データ コンテキストの一般的なシナリオは、変更通知をサポートする CLR 定義のビジネス オブジェクトを使用することです。 ビジネス オブジェクトの場合、データ コンテキストとして使用されるカスタム クラスは通常 、INotifyPropertyChanged を実装するため、データの更新によって一方向または双方向のバインディングが更新されます。 データ ソースがビジネス オブジェクトのコレクションである場合、 INotifyCollectionChanged とリストのサポート (IList または List) を実装したり 、ObservableCollection から派生したりできます。

適用対象

こちらもご覧ください