C# 当ViewModel设置为null时,使用ReactiveUI绑定方法将绑定设置为null
我有一个UserControl,它显示列表框中当前选定的项目。ListBox的SelectedItem绑定到UserControl的ViewModel属性,该属性实现IViewFor接口。ViewModel属性绑定到控件的DataContext 当我使用代码在UserControl内部配置绑定时,只要ViewModel设置为null(未选择任何项),绑定就不会更新。如果改用XAML,则每当上下文变为null时,绑定都会变为null 有没有办法在视图构造函数中使用Bind方法实现相同的行为 以下是TicketsView.xaml.cs绑定:C# 当ViewModel设置为null时,使用ReactiveUI绑定方法将绑定设置为null,c#,.net,reactiveui,C#,.net,Reactiveui,我有一个UserControl,它显示列表框中当前选定的项目。ListBox的SelectedItem绑定到UserControl的ViewModel属性,该属性实现IViewFor接口。ViewModel属性绑定到控件的DataContext 当我使用代码在UserControl内部配置绑定时,只要ViewModel设置为null(未选择任何项),绑定就不会更新。如果改用XAML,则每当上下文变为null时,绑定都会变为null 有没有办法在视图构造函数中使用Bind方法实现相同的行为 以下是
// 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);
this
.WhenAnyValue(v => v.ViewModel)
.BindTo(this, v => v.DataContext)
.AddTo(disposables);
this
.OneWayBind(ViewModel,
vm => vm.Author,
v => v.Label.Content)
.AddTo(disposables);
以下是TicketView.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);
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>
有没有办法用代码实现同样的效果?用它来代替您的//CurrentTicket到TicketView.ViewModel怎么样
this.ViewModel
.WhenAnyValue (vm => vm.CurrentTicket,
(vm) => vm == null ? null : vm
).BindTo (this.ViewModel, v => v.TicketView.ViewModel);
它将使TicketView.xaml.cs中的空绑定正常工作。您是如何解决此问题的?