[英]Datacontext lost with dynamic xaml in WPF
我有一個帶有簡單框架元素的窗口(我們稱其為“ myFrame”)。 在Window.Loaded中,我正在使用XamlReader.Parse(string)解析一個字符串變量(從外部源加載),結果是一個Page對象(本地var稱為“ myPage”)。 我正在設置myFrame.Content = myPage。
頁面內部是一個標簽,如下所示:
<label Name="DataBindingTestLabel" Content="{Binding Path=TestLabel, TargetNullValue='Null value'}" />
我正在嘗試提供一個匿名類型(為便於測試)作為框架的數據上下文,例如:
this.ContentFrame.DataContext = new { TestLabel = "Hello, world." };
我已經驗證了DataContext屬性在設置后是否具有該值,並保持該值只要我可以逐步執行該窗口,但是該值在呈現窗口和后備值“ Null值”之前的某個時間就丟失了被陳列。
啟用數據綁定跟蹤之后,Visual Studio中的輸出窗口將顯示:
System.Windows.Data信息:41:BindingExpression路徑錯誤:找不到“對象”的“ TestLabel”屬性,因為數據項為null。 發生這種情況是因為數據提供者尚未產生任何數據。 BindingExpression:Path = TestLabel; DataItem = null; 目標元素是“標簽”(名稱=“ DataBindingTestLabel”); 目標屬性為“內容”(類型為“對象”)
任何對我做錯事的見解都將受到贊賞。
我希望其他人可以確認這一點,因為我最近才剛剛使用匿名類型,但是MSDN上有關匿名類型的文章似乎表明,正如我所懷疑的那樣,您的匿名類型只是超出了范圍。 在上面鏈接的頁面的“備注”部分中,它說“匿名類型具有方法范圍”,因此我傾向於認為這是您的問題。
再說一次,我不確定,只是想就此事發表自己的看法...
事實證明,當內容是頁面元素時,框架元素存在處理數據上下文的問題。
解決方案是使用更通用的元素(ContentControl),而不是將動態內容作為Page元素,而是使用UserControl元素。 在這種設置中,數據上下文不會丟失,並且綁定可以按預期進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.