我已将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)”。
答案 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。