2016-11-29 62 views
3

我在寫用戶控件。 Xaml &後面的代碼。爲了綁定到屬性後面的代碼,屬性需要成爲一個依賴屬性。瞭解。爲什麼我需要綁定到代碼後面的依賴項屬性,但不是視圖模型?

爲什麼我可以綁定到一個poco實現INotifyPropertyChanged在視圖模型中設置爲視圖的數據上下文而不是在代碼後面?

XAML:

XAxis="{Binding ElementName=TimeSeriesChartControl, Path=XAxis}" 

後面的代碼:

public IAxis XAxis 
{ 
    get { return (IAxis)GetValue(XAxisProperty); } 
    set { SetValue(XAxisProperty, value); } 
} 

public static readonly DependencyProperty XAxisProperty = 
    DependencyProperty.Register("XAxis", typeof(IAxis), typeof(TimeSeriesChart), new PropertyMetadata(default(IAxis))); 

這個屬性是一個依賴屬性。如果我在這裏實現一個clr屬性,綁定會失敗。

爲什麼我可以在視圖模型類中實現clr屬性,但不在後面的代碼中?

+0

您是否還可以包含一個示例,說明如何使用失敗的clr屬性執行此操作,以及何時執行失敗,您得到的具體錯誤消息/錯誤行爲是什麼? –

回答

10

因爲依賴屬性支持綁定到其他依賴屬性或實現INotifyPropertyChanged的事物。

視圖模型應該嘗試保持平臺不可知,並且不瞭解視圖的任何內容,通過在視圖模型中使用依賴項屬性,將它與WPF僅支持相關聯,並且將有關視圖的信息「泄露」回到查看模型..

+0

好的,謝謝,那麼爲什麼我不能將用戶控件xaml中的屬性綁定到代碼後面的clr屬性? – Hardgraf

+1

只要該屬性是正確聲明的依賴項屬性,或者您在該屬性上執行了INotifyPropertyChanged模式,您就可以。但是,對任何派生自['DependencyObject'](https://msdn.microsoft.com/en-us/library/system.windows.dependencyobject(v = vs.110).aspx)的內容執行'INotifyPropertyChanged'模式是皺起眉頭。 –

+0

@Hardgraf如果你仍然有問題,更新你的問題,編輯顯示一個不起作用的例子。 –

相關問題