資訊
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

FrameworkElement.DataContextChanged Event

FrameworkElement.DataContext 屬性的值變更時發生。

語法


public event TypedEventHandler<FrameworkElement, DataContextChangedEventArgs> DataContextChanged

事件資訊

委派 TypedEventHandler<FrameworkElement, DataContextChangedEventArgs>

備註

FrameworkElement.DataContext 屬性有內建行為,其值藉以繼承給所有 FrameworkElement 子項目(這裡是指 FrameworkElement 的子項目,並且已設定了 DataContext 值)。這個行為可讓一組相關的項目使用相同的內容繫結至不同的來源屬性,這對於項目範本、資料範本和其他資料繫結案例特別有用。由於 DataContext 會繼承,因此一旦項目偵測到其繼承的 DataContext 值已變更,使用繼承值的每個 FrameworkElement 都可能引發另一個源自繼承項目而不是父項目的 DataContextChanged 事件。如果您不想要這個行為,您應該處理父來源 (在這裡事件會先引發) 的 DataContextChanged 事件。在您的處理常式邏輯中,將 DataContextChangedEventArgs 事件資料中 Handled 屬性的值設定為 true。這個動作會防止事件路由至子項目。

注意事項  DataContextChanged 具有路由行為,但不是真正的路由事件 (它沒有 RoutedEvent 識別項)。此外,它的路由是從父到子,而真正的路由事件則是從子到父。如果您熟悉 Windows Presentation Foundation (WPF),依據 WPF 事件路由定義,DataContextChanged 可被視為通道路由事件。

DataContextChanged 在控制邏輯或其他程式碼為主的邏輯想要通知繫結的資料內容已變更的情況下很實用,這通常表示資料繫結值將會變更。做為觸發程序來執行會進行內容驅動變更的程式碼,然後現有繫結就可以使用新的內容來重新計算值,這可能會很有用。您不想要在資料樣板的既有宣告繫結但需要變更通知的案例中,也可以使用它。在這個案例中,可以處理 DataContextChanged 偵測資料內容的變更,並且對程式碼中其他屬性直接變更以回應,就如同 XAML 宣告的繫結是透過資料繫結引擎動態進行一樣。例如,您可能有主要用於資料範本內部的自訂控制項,而您希望控制項能夠執行繫結作業,而不需要任何明確 Binding 宣告,無論是在應用程式 UI XAML 或是在資料範本中。

Windows 8 行為

Windows 8 無法追蹤此事件的多個接聽程式。如果事件有多個接聽程式/處理常式,嘗試移除其中一個會導致全部移除。在 Windows 8.1 中現在已修正此問題; 移除事件處理常式時只會正確地移除一個接聽程式。因為多個接聽程式是不常見的案例,大部分的程式碼不需要變更或行為檢查。

針對 Windows 8 編譯但要在 Windows 8.1 執行的應用程式會繼續使用 Windows 8 行為。

需求

支援的最小用戶端

Windows 8.1

支援的最小伺服器

Windows Server 2012 R2

命名空間

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadata

Windows.winmd

請參閱

FrameworkElement
DataContext
DataContextChangedEventArgs
資料繫結概觀

 

 

顯示:
© 2014 Microsoft