Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当ViewModel设置为null时,使用ReactiveUI绑定方法将绑定设置为null_C#_.net_Reactiveui - Fatal编程技术网

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

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方法实现相同的行为 以下是

我有一个UserControl,它显示列表框中当前选定的项目。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);
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中的空绑定正常工作。

您是如何解决此问题的?