禁用 ReactiveUI ItemsView.ItemTemplate 挂钩

Disable ReactiveUI ItemsView.ItemTemplate hooking

ItemsViewItemsView 的子类如 ListBox, ComboBox, ..., ReactiveUI 自动设置 ItemTemplate 属性.这使得将一堆视图模型添加到列表、将列表绑定到 ItemsView 并为每个视图模型提供正确的视图变得容易。

但是,有时这种行为是不可取的。例如,将常规对象列表绑定到 ComboBox 后,我得到异常 "Couldn't find view for MyNamespace.MyObject".

我可以通过在 ComboBox 上设置 DisplayMemberPath 属性 来解决这个问题,但是这个 属性 在编译时是未知的。我想将 DisplayMemberPath 从 ViewModel 绑定到 View。不幸的是,这会产生以下异常:"InvalidOperationException: Cannot set both DisplayMemberPath and ItemTemplate"

我该如何解决这个问题?

在控件上为 DisplayMemberPath 设置一个虚拟值,并保持 DisplayMemberPath 与 ViewModel 的绑定。 ReactiveUI 将看到虚拟值并且不会设置 ItemTemplate 属性。一旦附加了 ViewModel,虚拟值就会被绑定替换,一切都会按预期工作。