正确。因此,从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