自定义类ToString()覆盖不显示在WPF组合框中
问题描述:
我有一个使用MVVM构建的WPF应用程序,并且试图在组合框中显示自定义类。尽管重写ToString方法让眼睛更容易一些,但我仍然得到Namespace.Asset。我究竟做错了什么? XAML代码自定义类ToString()覆盖不显示在WPF组合框中
<ComboBox ItemsSource="{Binding Drivers}" SelectedItem="{Binding SelectedDriver}" Grid.Row="20" Grid.Column="1" Grid.ColumnSpan="3"/>
视图模型代码
public List<Driver> Drivers
{
get
{
return this.drivers;
}
set
{
this.drivers = value;
this.RaisePropertyChanged("Drivers");
}
}
public Driver SelectedDriver
{
get
{
return this.selectedDriver;
}
set
{
this.selectedDriver = value;
this.RaisePropertyChanged("SelectedDriver");
}
}
一个与被覆盖的的ToString自定义类代码
public class ExperimentalDriver : Driver
{
public override DriverResponse GetDriverResponse(double time)
{
... random unrelated code....
}
public override string ToString()
{
return "Experimental Driver";
}
}
答
您可能需要设置的ToString()基类
类似于:
public class Driver
{
protected string displayName;
public override string ToString()
{
return displayName;
}
}
然后为你的子类的类的构造函数会简单地设置显示名
public class ExperimentalDriver : Driver
{
public ExperimentalDriver()
{
displayName = "Experimental Driver";
}
}
+0
这与广告中的完全一样,它比我的原始解。在发布之前,我刚刚发现导致问题的原因是我公开了新的抽象字符串ToString();在我的基础班。当我评论说这个问题也消失了。 – PlTaylor 2011-06-03 16:00:37
答
好吧,我想通了。我在抽象类抽象类“驱动程序”我下面的代码添加到我要求所有派生类有一个ToString()方法
public new abstract string ToString();
当我删除它的问题消失。
您的参考是不好的。使用ExperimentalDriver类删除对程序集的引用,并将其重新添加*作为项目引用*。 – Will 2011-06-03 15:32:05
这是一个项目的参考,但我删除它,并重新添加它的笑声,它仍然显示为Namespace.Asset而不是“实验驱动程序” – PlTaylor 2011-06-03 15:52:04