1

次の文字列型のプロパティがあります。

[Category("General")]
[DisplayName("Book Name")]
public string BookName
{ //getter;
  //setter;
}

このプロパティを含むオブジェクトを propertygrid にバインドするときに文字列型のリストをソースとして提供したいと考えています。

List<string> booksource = new List<string>();

プロパティが列挙型の場合、コンボボックスに自動的に入力されます。コレクションを通じて同じ機能を実現したいと考えています。

編集:展開:

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 にバインドしたいと思います。

4

1 に答える 1

1

遅刻しないよりはましだ ;-)

Extended WPF Toolkit の PropertyGrid を使用すると、次のように行うことができます。

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;
     }

}
于 2015-02-13T18:45:03.003 に答える