經過一段時間關於該代碼的思考後,我找不到任何嚴重的問題,除了我可能會解釋的這個角落案例。
假設您的Xaml屬於一個名爲MyUserControl的類,並且它從UserControl繼承。
讓我們假設你有:
UserControl ctrl = new MyUserControl();
ctrl.DataContext = new Dog();
這顯然是合法的,你是不是通過的MyUserControl的類型安全保護,因爲引用變量的類型是用戶控件,它的DataContext屬性是對象類型仍。然而,讓我們想象,下了線,你試試下面,在的MyUserControl的上下文:
Cow c = this.DataContext;
Ç將是無效的。這是你的意圖。然而,這可能會讓你的生活在調試場景下變得更加困難,因爲你被認爲你的DataContext是空的,儘管它不是你期望的。可能難以理解爲什麼你的數據綁定在你的datacontext看起來都是空的時候都很有趣。
我的這種做法是不是隱藏DataContext屬性,而是通過一個新的屬性,再暴露它:
public Cow Model
{
get
{
return this.DataContext as Cow;
}
set
{
this.DataContext = value;
}
}
在我設置了上面,而Model屬性將返回空值的情況下, DataContext將返回一個對Dog實例的引用,更恰當地反映真正發生的事情。或者,你可能會返回以下實現您的DataContext屬性的getter:
return (Cow)this.DataContext;
至少你會收到一個異常告訴你的DataContext確實有一些,但不是你想要的。然而,它似乎很俗氣。
無論如何,這真的不是嚴重問題,只是在我設計的場景下可能造成的不便。
我假設你在你的.xaml.cs文件(後面的代碼)中重新聲明DataContext,因爲你在你的「xaml」中說過,但是發佈了c#代碼? – oXeNoN
@scott我真的很抱歉,但我的意思是名爲DataContext而非Cow的屬性 –
@Luis Filipe,我剛剛看到您更新的更改並刪除了我的評論。我明白你的意思了。 – Scott