簡體   English   中英

WPF中的動態XAML丟失了數據上下文

[英]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.

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