Tôi đang viết một ứng dụng GUI, nơi tôi cần bật tính năng chỉnh sửa các đối tượng tùy ý (các kiểu của chúng chỉ được biết trong thời gian chạy).PropertyGrid và Dynamic Types of Objects
Tôi đã quyết định sử dụng điều khiển PropertyGrid để bật chức năng này. tôi tạo ra các lớp sau:
[TypeConverter(typeof(ExpandableObjectConverter))]
[DefaultPropertyAttribute("Value")]
public class Wrapper
{
public Wrapper(object val)
{
m_Value = val;
}
private object m_Value;
[NotifyParentPropertyAttribute(true)]
[TypeConverter(typeof(ExpandableObjectConverter))]
public object Value
{
get { return m_Value; }
set { m_Value = value; }
}
}
Khi tôi nhận được một thể hiện của một đối tượng tôi cần phải chỉnh sửa, tôi tạo ra một Wrapper cho nó và đặt nó như là đối tượng được chọn:
Wrapper wrap = new Wrapper(obj);
propertyGrid.SelectedObject = wrap;
Nhưng tôi đã chạy vào các vấn đề sau đây - các công trình trên như mong đợi chỉ khi loại obj là một số loại tùy chỉnh (tức là một lớp mà tôi xác định bởi bản thân mình, hoặc được xây dựng trong loại phức tạp) nhưng không phải khi obj là một nguyên thủy.
Ví dụ, nếu tôi xác định:
[TypeConverter(typeof(ExpandableObjectConverter))]
public class SomeClass
{
public SomeClass()
{
a = 1;
b = 2;
}
public SomeClass(int a, int b)
{
this.a = a;
this.b = b;
}
private int a;
[NotifyParentPropertyAttribute(true)]
public int A
{
get { return a; }
set { a = value; }
}
private int b;
[NotifyParentPropertyAttribute(true)]
public int B
{
get { return b; }
set { b = value; }
}
}
Và làm:
Sau đó, mọi thứ suôn sẻ sưng. Mặt khác, khi tôi thực hiện như sau:
int num = 1;
Wrapper wrap = new Wrapper(num);
propertyGrid.SelectedObject = wrap;
Sau đó, tôi có thể nhìn thấy giá trị "1" trong lưới (và nó không grayscaled) nhưng tôi không thể chỉnh sửa giá trị. Tôi nhận thấy rằng nếu tôi thay đổi kiểu thuộc tính "Giá trị" của Wrapper thành int và loại bỏ thuộc tính TypeConverter, nó hoạt động. Tôi nhận được hành vi tương tự cho các loại và chuỗi nguyên thủy khác.
Sự cố là gì?
Cảm ơn trước!
Cảm ơn rất nhiều, điều đó đã làm được điều đó! :) – Marina
Tại sao dòng này 'parentConverter.GetProperties (context.Instance);' return null? –