You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF+ReactiveUI项目ListBox.ItemsSource绑定ReadOnlyObservableCollection失效求解

问题根源

你代码中OneWayBind绑定的ViewModel属性选择器表达式写法错误:
在绑定声明中第二个参数的lambda表达式内,你直接访问了视图类的ViewModel属性,而非lambda的输入参数vm。ReactiveUI需要解析完整的成员访问表达式链来监听属性变更,直接写ViewModel.Recordings会被识别为常量表达式,不满足绑定解析要求,因此抛出你遇到的NotSupportedException异常。

解决方案

直接修正绑定表达式即可:

this.WhenActivated(d =>
{
    // 将 vm => ViewModel.Recordings 改为使用lambda参数vm访问属性
    this.OneWayBind(ViewModel,
       vm => vm.Recordings,
       view => view.RecordingsListBox.ItemsSource).DisposeWith(d);
});

可选优化项

  • 建议给DynamicData的订阅添加异常处理,避免后台数据更新时抛出未处理异常:
    recordindsService.RecordingsList.Connect()
        .Transform(rec => new RecordingViewModel(rec as IRecordingModel))
        .Bind(out _recordings)
        .Subscribe(ex => 
        {
            // 这里处理数据变更异常
        });
    
  • 不建议在视图构造函数中直接通过Locator获取ViewModel赋值,推荐通过依赖注入的方式将ViewModel传入视图,避免视图和服务定位器耦合。

内容的提问来源于stack exchange,提问作者Alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:36:02