WPF ComboBox忽略ToString覆盖ItemsSource对象

时间:2012-10-24 19:31:12

标签: c# wpf combobox override tostring

我已将WatchList定义如下:

// a named list of VariableWatchers
public class WatchList : List<VariableWatcher>
{
    private string _name;

    public WatchList(string name) : base()
    {
        _name = name;
    }

    public override string ToString()
    {
        return _name;
    }
}

我将WatchLists列表绑定到ComboBox的ItemsSource属性,如下所示:

<ComboBox x:Name="WatchListDropdown"
          ItemsSource="{Binding Path=WatchLists}"
          VerticalAlignment="Center"
          Margin="5"/>

“WatchLists”指的是我的DataContext中的以下属性:

public IList<WatchList> WatchLists
{
    get { return _watchLists; }
}

除了列表中的所有条目都显示为“(Collection)”而不是_name变量之外,一切都很有效。我在ToString中设置了一个断点,并确认它在某个时刻被调用,并返回正确的值,但不知怎的,ComboBox仍显示“(Collection)”。

3 个答案:

答案 0 :(得分:5)

不确定为什么它没有使用ToString()覆盖,但您是否考虑过使用DisplayMemberPath?

<ComboBox x:Name="WatchListDropdown"
      ItemsSource="{Binding Path=WatchLists}"
      VerticalAlignment="Center"
      DisplayMemberPath="Name"
      Margin="5"/>

当然,您需要调整对象,因为绑定需要公共属性或依赖属性。

private string _name;
public string Name { get { return _name; } set { _name = value; } }

答案 1 :(得分:0)

WatchLists是WatchList的集合,不是吗?因此将调用并显示Collection.ToString()。

如何将DisplayMemberPath指定为&#34; name&#34;?我希望它有效:)

答案 2 :(得分:0)

如果ItemsSource绑定到WatchList类型的List<VariableWatcher>,则显示的实际集合将是VariableWatcher的列表。

如果ItemsSource绑定到WatchList的集合,.ToString()应覆盖默认显示。当然,您始终可以创建属性Name并将其设为DisplayMember。