当ViewModel设置为null时,使用ReactiveUI Bind方法将绑定设置为null

时间:2016-03-24 09:38:50

标签: c# .net reactiveui

我有一个UserControl,它显示当前在ListBox中选择的项目。 ListBox的SelectedItem绑定到UserControl的ViewModel属性,该属性实现IViewFor接口。 ViewModel属性绑定到控件的DataContext。

当我使用代码在UserControl中配置绑定时,只要ViewModel设置为null(没有选择任何项目时),绑定就不会更新。如果我改为使用XAML,只要上下文变为null,绑定就会变为null。

有没有办法在视图构造函数中使用Bind方法实现相同的行为?

以下是TicketsView.xaml.cs绑定:

// Tickets to TicketsListBox.ItemsSource

this
    .OneWayBind(ViewModel,
        vm => vm.Tickets,
        v => v.TicketsListBox.ItemsSource)
    .AddTo(disposables);

// CurrentTicket to TicketsListBox.SelectedItem

this
    .Bind(ViewModel,
        vm => vm.CurrentTicket,
        v => v.TicketsListBox.SelectedItem)
    .AddTo(disposables);

// CurrentTicket to TicketView.ViewModel

this
    .Bind(ViewModel,
        vm => vm.CurrentTicket,
        v => v.TicketView.ViewModel)
    .AddTo(disposables);

以下是TicketView.xaml.cs绑定:

this
    .WhenAnyValue(v => v.ViewModel)
    .BindTo(this, v => v.DataContext)
    .AddTo(disposables);

this
    .OneWayBind(ViewModel,
        vm => vm.Author,
        v => v.Label.Content)
    .AddTo(disposables);

每当ViewModel设置为null绑定时,不会更新。 XAML按预期工作:

<UserControl ...>
<Grid>
    <Label x:Name="Label" Content="{Binding Author}" />
</Grid>

使用代码实现相同的任何方式?

1 个答案:

答案 0 :(得分:0)

如何将// CurrentTicket替换为TicketView.ViewModel

this.ViewModel
.WhenAnyValue (vm => vm.CurrentTicket,  
(vm) => vm == null ? null : vm
).BindTo (this.ViewModel, v => v.TicketView.ViewModel);

它将使TicketView.xaml.cs中的空绑定起作用。