FrameworkElement.DataContext 属性

定义

获取或设置 FrameworkElement 的数据上下文。 数据上下文的常见用途是使用 FrameworkElement{Binding} 标记扩展并参与数据绑定。

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} 标记扩展,则将使用 FrameworkElement::DataContext 属性和 BindableAttribute。 如果使用 {x:Bind} 标记扩展,则不会使用 FrameworkElement::DataContextBindableAttribute

有关以下 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 技术是在调用 InitializeComponent之后将其添加到运行时对象树的根目录下,作为应用初始化逻辑的一部分。 数据绑定概述中介绍了此方法。

除了指定源外,数据上下文还可以存储绑定声明的其他特征,例如数据源的路径。

设置 方便将同一 DataContext 对象上不同属性的多个绑定设置为共享数据上下文。 但是,对于未定义 ,并且所有必需的绑定限定都存在于单独的绑定语句中,则有效 DataContext

实现对象数据源的方式因要求和编程语言而异。 有关详细信息,请参阅深入了解数据绑定

C# 数据上下文的常见方案是使用支持更改通知的 CLR 定义的业务对象。 对于业务对象,用作数据上下文的自定义类通常实现 INotifyPropertyChanged,以便对数据的更新可以更新单向或双向绑定。 如果数据源是业务对象的集合,它可以实现 INotifyCollectionChanged 加列表支持 (IListList) ,也可以从 ObservableCollection 派生。

适用于

另请参阅