好的,从WPF迁移到UWP时,我正在尝试使用x:Bind
来获得编译时优势。简单的场景都能很好地工作;但我发现了一些问题,我无法解决它们。它们都相关,所以我想把它们放在一个地方:
- 我无法让Intellisense与
x:Bind
一起工作。我在XAML和构造函数中设置了DataContext(以及d:DataContext
,就像我们在WPF中一样),但无论如何都不会显示成员。有成功的经验吗? - 然后我在某个地方读到,在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
属性内部引发的更改通知都不会更新Page的UI。
我尝试了一个替代方法,就是在每个级别侦听PropertyChanged,然后将其向上冒泡到层次结构中,但这并没有起作用。即使它起作用了,这样做似乎有点太麻烦了。在WPF中,像Game.Player.Name
这样的子属性可以正常工作,而无需进行属性更改冒泡。难道我错过了什么吗?
{x:Bind}
的默认模式是OneTime
,而对于大多数情况下的{Binding}
默认为OneWay
。相关问答:使用编译绑定(x:bind),为什么我需要调用 Bindings.Update()?。 - IInspectable