我需要能够将Listbox控件项文本设置为泛型对象的属性。
foreach ( GenericObject obj in _genericObjectsCollection )
{
listbox1.Items.Add( obj );
listbox1.Items.Text = obj.ItemsText;
}
通用对象类
public class GenericObject
{
public string ItemsText { get; set; }
public OtherClass TheOtherGenericClass { get; set; }
}
文字呈现为" myProject.GenericObject"
不是获取text属性,而是简单地呈现对象类型。
要呈现为的文字:
"通用对象1"
的文字"通用对象2的文本"
以及集合中的每个对象。
我知道在使用正确的数据源时,您可以使用listbox控件的display member属性,但在将集合用作数据源时会出现异常。它通知我,复杂的类不能用于完成此任务。
使用datasource属性时会发生什么?
我使用的代码
foreach ( GenericObject obj in _genericObjectsCollection )
{
listboxProcessedQuotes.DataSource = obj ;
listboxProcessedQuotes.DisplayMember = obj.ItemsText;
}
结果
答案 0 :(得分:0)
foreach ( GenericObject obj in _genericObjectsCollection )
{
listbox1.Items.Add( obj.itemsText );
}
如果您还需要能够获取基础选定对象,则可以将其存储在Tag属性中:
foreach ( GenericObject obj in _genericObjectsCollection )
{
ListBoxItem itm = new ListBoxItem();
itm.Content = obj.itemsTxt;
itm.Tag = obj;
listbox1.Items.Add(itm);
}
然后,当您获得所选的列表框项目时,您可以执行以下操作:
itm.Tag as GenericObject
答案 1 :(得分:0)
我很好奇你是如何尝试为列表框做显示成员路径的。这真的应该是可能的。这是一个简单的例子:
//xaml
<ListBox x:Name="ListBox" DisplayMemberPath="MyStringProperty"/>
//code behind
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.LoadItems();
}
private void LoadItems()
{
ListBox.Items.Add(new MyListItem() { MyBoolProperty = true, MyStringProperty = "Hello" });
ListBox.Items.Add(new MyListItem() { MyBoolProperty = false, MyStringProperty = "World" });
}
}
//my object class
public class MyListItem : NotificationObject
{
private string _myString;
private bool _myBool;
public MyListItem()
{ }
public string MyStringProperty
{
get { return _myString; }
set
{
_myString = value;
this.RaisePropertyChanged("MyStringProperty");
}
}
public bool MyBoolProperty
{
get { return _myBool; }
set
{
_myBool = value;
this.RaisePropertyChanged("MyBoolProperty");
}
}
}
答案 2 :(得分:0)
这是GenericObject
应该如何:
public class GenericObject
{
private string _itemsText;
public string itemsText
{
get { return _itemsText; }
set { _itemsText = value; }
}
}
然后创建自定义对象的简单列表,并将其添加到ItemsSource
的{{1}}:
ListBox
注意List<GenericObject> l = new List<GenericObject>();
l.Add(new GenericObject() { itemsText = "test1" });
l.Add(new GenericObject() { itemsText = "test2" });
list1.ItemsSource = l;
的XAML声明,我正在使用绑定:
ItemTemplate
我建议阅读有关数据绑定的更多信息,这非常有用。 https://msdn.microsoft.com/en-us/library/ms750612%28v=vs.110%29.aspx