将 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}"/>
我在视图代码隐藏中将 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}"/>