将 ReactiveList 绑定到 ComboBox 找不到视图错误

Binding ReactiveList to ComboBox couldn't find view error

我在视图代码隐藏中将 ReactiveList 绑定到 ComboBox 并收到错误 System.Exception:“无法找到 'Value1' 的视图。”.

ViewModel.cs

public class SourceItem 
{
    public override string ToString()
    {
        return Name;
    }
    public string Name { get; set; }
}

public class ViewModel : ReactiveObject
{
    public ReactiveList<SourceItem> SourceList { get; } = new ReactiveList<SourceItem>();
    public SourceItem SelectedSourceItem { get; set; }

    public ViewModel()
    {
        SourceList.Add(new SourceItem() {Name = "Value1"});
    }
}

View.xaml

<ComboBox Name="Source"/>

View.cs

this.OneWayBind(ViewModel, x => x.SourceList, x => x.Source.ItemSource);
this.Bind(ViewModel, x => x.SelectedSourceItem, x => x.Source.SelectedItem);

有没有一种简单的方法可以强制将 ToString() 用于显示值?

常规 Binding 将在没有 DataTemplate 的情况下自动工作。它将生成一个 DataTemplate 来显示所提供数据的 string 表示。

RxUI 绑定不能那样工作;你必须提供 DataTemplate 才能让他们工作:

<ComboBox Name="Source">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

当仅使用 {Binding} 时,它应该回退到在您的 class 上调用 ToString()。或者,您当然可以告诉它手动绑定到 Name 属性:

<TextBlock Text="{Binding Name}"/>