正確。因此,從WPF移動到UWP,我試圖使用x:Bind
來獲得編譯時的好處。簡單的方案工作正常;但是我發現了一些我無法解決的問題。他們都是相關的,所以我想我會張貼他們在一個地方:x:綁定到UWP(通用Windows平臺)
- 我還沒有能夠使Intellisense與
x:Bind
一起工作。我在XAML和構造函數中都設置了DataContext(以及WPF中的d:DataContext
),但它不會顯示成員。有沒有人成功做到這一點? - 然後我在UWP的某處讀到
DataContext
總是設置爲Page
的代碼隱藏(真的??),我需要在代碼隱藏中定義一個ViewModel類型屬性,然後在x:Bind
中使用該屬性。它是否正確?我試了一下,它的工作原理,但引起了下一個問題。 - 如果我在Page的代碼隱藏中定義ViewModel類型的屬性,則引發
PropertyChanged
通知的任何子屬性都不會更新UI。例如,如果代碼隱藏屬性名爲Game
(的GameVM
型)並且在GameVM
公共屬性命名Player
(的GamePlayer
型),並依次GamePlayer
包含一個名爲Name
屬性,則x:Bind
路徑看起來像{x:Bind Path=Game.Player.Name}
。但是如果我這樣做,則從Name
屬性中引發的任何更改通知都不會更新頁面的UI。
我試過的一個替代方法是在每個級別上聽PropertyChanged,然後將其展開到層次結構中,但這並不奏效。即使這樣做,這樣做似乎有點太多了。在WPF中,像Game.Player.Name
這樣的子屬性可以正常工作,而不必進行屬性更改冒泡。或者我錯過了什麼?
第一點:在獲得建議之前,您需要始終需要構建項目。我總是建立項目,然後打開屬性窗口,然後從可能的資源列表中選擇綁定源 –
@MatthiasHerrmann:這裏不是問題。我已經多次建立了這個項目。請在下面的Monish的回答中閱讀我的討論。 – dotNET
['{x:Bind}'](https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/x-bind-markup-extension)的默認模式是'OneTime'。在大多數情況下,'{Binding}'的默認值是'OneWay'。相關問答:[使用編譯綁定(x:bind),爲什麼我必須調用Bindings.Update()?](http://stackoverflow.com/q/33070705/1889329)。 – IInspectable