我有以下string类型的属性。
[Category("General")]
[DisplayName("Book Name")]
public string BookName
{ //getter;
//setter;
}
将包含此属性的对象绑定到propertygrid时,我想提供一个类型字符串列表作为源。
List<string> booksource = new List<string>();
当Property属于enum类型时,它会自动填充组合框,我希望通过集合实现相同的功能。
修改: 扩展:
enum BookType
{
Novel = 0,
Magazine = 1
}
class Class1
{
string _bookname = "Book 1";
BookType _booktype = BookType.Magazine;
[Category("General")]
[DisplayName("Book Name")]
public string BookName
{
get { return this._bookname; }
set { this._bookname = value; }
}
[Category("General")]
[DisplayName("Book Type")]
public BookType BookType
{
get { return this._booktype; }
set { this._booktype = value; }
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Class1 obj = new Class1();
this.wpfpropertygrid.SelectedObject = obj;
}
}
对于上面的代码,propertygrid显示一个组合框,其中包含属性BookType的项目“Magazine”和“Novel”,以及一个文本框,其中包含属性BookName的文本“Book 1”。我希望属性BookName显示为组合框,我可以明确地提供源。我想将列表{“Book 1”,“Book 2”,“Book 3”}绑定到属性BookName,以便用户可以选择其中任何一个。
答案 0 :(得分:1)
迟到总比没有好; - )
使用PropertyGrid from Extended WPF Toolkit,您可以这样做:
enum BookType
{
Novel = 0,
Magazine = 1
}
public class BookItemsSource : IItemsSource
{
public ItemCollection GetValues()
{
var books = new ItemCollection();
books.Add("Book 1");
books.Add("Book 2");
books.Add("Book 3");
return books;
}
}
public class Class1
{
string _bookname = "Book 1";
BookType _booktype = BookType.Magazine;
[Category("General")]
[DisplayName("Book Name")]
[ItemsSource(typeof(BookItemsSource))]
public string BookName
{
get { return this._bookname; }
set { this._bookname = value; }
}
[Category("General")]
[DisplayName("Book Type")]
public BookType BookType
{
get { return this._booktype; }
set { this._booktype = value; }
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Class1 obj = new Class1();
this.wpfpropertygrid.SelectedObject = obj;
}
}