禁用 ReactiveUI ItemsView.ItemTemplate 挂钩
Disable ReactiveUI ItemsView.ItemTemplate hooking
在 ItemsView
和 ItemsView
的子类如 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,虚拟值就会被绑定替换,一切都会按预期工作。
在 ItemsView
和 ItemsView
的子类如 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,虚拟值就会被绑定替换,一切都会按预期工作。