绑定到ReactiveUserControl.ViewModel不会设置ViewModel

时间:2018-06-06 16:31:23

标签: c# wpf reactiveui

我创建了ReactiveUserControl<Item>。它适用于ViewModelViewHost等。

我想我可以在XAML中使用它,就像这样:

<local:ItemView ViewModel="{Binding SelectedBigItem.Item}"/>

但它不起作用 - 不显示SelectedBigItem.Item。属性SelectedBigItem确实引发了更改通知。物品本身就是DTO - 只是普通的物业。

我知道两个解决方案:

  1. 使用ViewModelViewHost - 看起来像是一个巨大的矫枉过正,因为它总会显示相同的视图

  2. 订阅背后的代码。我给控制名称=“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);
            });
    
  3. 工作和我讨厌两个:一个是矫枉过正,第二个感觉像作弊,而且很乏味。为什么绑定不起作用?我尝试设置不同的触发器和模式,但没有任何帮助。

    编辑:

    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

    时它的行为完全相同

0 个答案:

没有答案