2016-01-25 26 views
0

我目前在做與C#/ WPF的用戶控件,我使用一些DependencyProperty的對象。的DependencyProperty回調不叫

我想要做的是當值的變化,我們稱之爲回調方法來處理一些數據...我看到有用於此目的的PropertyChangedCallback類,但它不工作..

這裏是我的代碼:

用戶控件:

public partial class TimeLine : UserControl 
{ 
    public static readonly DependencyProperty FramecountProperty = DependencyProperty.Register("FrameCount", typeof(Int32), typeof(TimeLine), new FrameworkPropertyMetadata(0, new PropertyChangedCallback(FrameCountChanged))); 

    public Int32 FrameCount 
    { 
     get { return (Int32)this.GetValue(FramecountProperty); } 
     set { this.SetValue(FramecountProperty, value); } 
    } 

    // More code... 

    public static void FrameCountChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     // Do stuff 
    } 
} 

XAML:

<!-- Time line container --> 
<controls:TimeLine Grid.Row="2" Header="Storyboard" FrameCount="{Binding FrameCount}" /> 

ViewModel:

private Int32 frameCount; 
public Int32 FrameCount 
{ 
    get { return this.frameCount; } 
    // this is from: https://github.com/ShyroFR/CSharp-Elegant-MVVM 
    set { this.NotifyPropertyChanged(ref this.frameCount, value); } 
} 

public MainViewModel() 
{ 
    this.FrameCount = 42; 
} 

我是我做錯了嗎?

感謝您的幫助。

+0

試試這個,幀數=「{結合,幀數,模式=雙向}」我不認爲它結合兩種方式,你必須告訴它做它,你也可以,如果你想讓它綁定兩個添加到您的依賴屬性默認方式 – adminSoftDK

+0

顯示你如何實現'NotifyPropertyChanged'。不要擔心雙向綁定。你在這裏沒有一個,你不需要一個。 PropertyChangedCallback應該在源屬性更改時調用(也適用於單向綁定)。 – Clemens

+0

還要確保綁定具有源對象。即你已經在某處設置了一個DataContext(對於類MainViewModel的一個實例)。 TimeLine控件是否顯示任何內容? – Clemens

回答

0

添加Mode=TwoWay到你綁定。默認情況下,自定義依賴屬性的綁定是OneWay。

+0

當然,但每當依賴屬性改變其價值,尤其是還可以當源是一個雙向綁定的PropertyChangedCallback被調用。 – Clemens

+0

確實如此,但UI上的值更改不會報告給依賴項屬性。除非明確設置爲TwoWay,否則海關控制的默認行爲是隻讀綁定。 – jvanrhyn

+0

您可能的意思是「回報給源屬性」。但這並不重要。 OP有一個改變的源屬性,但目標依賴項屬性沒有設置(我敢肯定,因爲沒有設置DataContext)。不涉及雙向綁定。在問題中沒有跡象表明控制曾經想要改變源屬性(在這種情況下雙向是必要的)。 – Clemens

0

我找到了解決方案,找到了祖先。

<controls:TimeLine Grid.Row="2" Header="Storyboard" FrameCount="{Binding Path=DataContext.FrameCount, Mode=TwoWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" /> 

感謝您的幫助!