簡體   English   中英

如何在Windows Phone 8 Silverlight中創建datacontextchanged事件

[英]How to create datacontextchanged event in windows phone 8 silverlight

我想擴展我的UserControl類,以便它可以在其中具有datacontextchanged事件,就像在Windows Phone xaml應用程序中一樣。

但是我找不到那個事件。

此DataContextChangedEventArgs在Windows Phone的基於xaml的應用程序中,但是在Silverlight中創建項目時找不到該事件

[免責聲明:我不是Windows Phone開發人員,所以我所說的有關移動Silverlight的內容都是基於我在msdn上閱讀的內容(但從未嘗試過),以及與普通的功能齊全的瀏覽器Silverlight一起工作所了解的內容。

僅在Silverlight 5中支持DataContextChanged事件。據我所知,Silverlight的移動版本基於Silverlight4。這意味着您必須自己實現該事件。 只需在UserControl中定義類型為object的依賴項屬性,然后直接與DataContext綁定即可。 一旦DataContext更改,您的綁定對象將反映此更改,因此您可以輕松地檢測到它並觸發您自己的事件。

public class MyControl : UserControl
{
    public MyControl()
    {
        BindingOperations.SetBinding( this, MyControl.ObservedDataContextProperty, new Binding() );
    }

    public object ObservedDataContext
    {
        get { return (object) GetValue( ObservedDataContextProperty ); }
        set { SetValue( ObservedDataContextProperty, value ); }
    }

    public static readonly DependencyProperty ObservedDataContextProperty =
        DependencyProperty.Register( "ObservedDataContext", typeof( object ), typeof( MyControl ), new PropertyMetadata( null, OnObservedDataContextChanged ) );

    private static void OnObservedDataContextChanged( DependencyObject d, DependencyPropertyChangedEventArgs e )
    {
        ((MyControl) d).OnObservedDataContextChanged();
    }

    private void OnObservedDataContextChanged()
    {
        RaiseDataContextChanged();
    }

    private void RaiseDataContextChanged()
    {
        var h = DataContextChanged;
        if (h != null) h( this, EventArgs.Empty );
    }

    public event EventHandler DataContextChanged;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM