我创建了ReactiveUserControl<Item>
。它适用于ViewModelViewHost等。
我想我可以在XAML中使用它,就像这样:
<local:ItemView ViewModel="{Binding SelectedBigItem.Item}"/>
但它不起作用 - 不显示SelectedBigItem.Item。属性SelectedBigItem确实引发了更改通知。物品本身就是DTO - 只是普通的物业。
我知道两个解决方案:
使用ViewModelViewHost - 看起来像是一个巨大的矫枉过正,因为它总会显示相同的视图
订阅背后的代码。我给控制名称=“ItemPreview”并在CB中:
IDisposable sub = null;
sub = this.WhenActivated(d =>
{
ViewModel.WhenAnyValue(x => x.SelectedBigItem).Subscribe(quote =>
{
ItemPreview.ViewModel = quote?.Item;
}).DisposeWith(d);
sub.DisposeWith(d);
});
编辑:
https://github.com/qrzychu/ReactiveUserControlBindingSample
我想要快速取样。有3种绑定方式,唯一不起作用的方法是通过ViewModel.SelectedItem属性。
<!-- Works-->
<local:ItemView DockPanel.Dock="Top" ViewModel="{Binding ElementName=List, Path=SelectedItem}"/>
<!-- Does not work-->
<local:ItemView DockPanel.Dock="Top" ViewModel="{Binding SelectedItem}"/>
<!-- Set in MainWindow.xaml.cs. Works-->
<local:ItemView DockPanel.Dock="Top" x:Name="ItemView"/>
在第一次提交中,您可以看到当没有BigItem且只有Item
时它的行为完全相同