自定义类ToString()覆盖不显示在WPF组合框中

自定义类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"; 
    } 
} 
+0

您的参考是不好的。使用ExperimentalDriver类删除对程序集的引用,并将其重新添加*作为项目引用*。 – Will 2011-06-03 15:32:05

+0

这是一个项目的参考,但我删除它,并重新添加它的笑声,它仍然显示为Namespace.Asset而不是“实验驱动程序” – PlTaylor 2011-06-03 15:52:04

您可能需要设置的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(); 

当我删除它的问题消失。