显示一定的每个对象的变量为一个ComboBox
问题描述:
快速的问题..显示一定的每个对象的变量为一个ComboBox
我有这个类的对象的列表:
public class Whatever
{
public string Name { get; set; }
public List<blaBla> m_blaBla { get; set; }
// ..
}
而且我想给List<Whatever>
链接到ComboxBox,其中用户会看到每个Whatever
对象的Name
对象。我怎样才能做到这一点?
答
您既可以使用ComboBox.ItemTemplate
这样的:
C#:
List<Whatever> lst = new List<Whatever>();
public MainWindow()
{
InitializeComponent();
cmb.ItemsSource = lst;
}
XAML:
<ComboBox Name="cmb">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
或者使用DisplayMemberPath
:
<ComboBox Name="cmb" DisplayMemberPath="Name">
</ComboBox>
答
创建视图模型:
public ObservableCollection<Whatever> WhCol
{
get { return this.Name; }
set { }
}
然后匹配查看
<ComboBox DisplayMemberPath="Name" ItemsSource="{Binding WhCol}" />
根据Model-View-Modelview Pattern
,如果你wan't使基于用户输入的变化这是更适合。 (这对于组合框来说是相当罕见的)。
答
或者只是覆盖ToString()
功能,它会做的工作适合你:
public class Whatever
{
public string Name { get; set; }
public List<blaBla> m_blaBla { get; set; }
// ..
public override string ToString()
{
return Name;
}
}
然后:
List<Whatever> MyList = new List<Whatever>();
public MainWindow()
{
InitializeComponent();
MyComboBox.ItemsSource = MyList;
}