Tôi đang cố gắng sử dụng System.Windows.Forms.PropertyGrid
.Tại sao thuộc tính Có thể duyệt web làm cho thuộc tính không bị ràng buộc?
Để làm cho thuộc tính không hiển thị trong lưới này, bạn nên sử dụng BrowsableAttribute
đặt thành false
. Nhưng việc thêm thuộc tính này làm cho thuộc tính không bị ràng buộc.
Ví dụ: Tạo một Windows mới Forms dự án, và thả một TextBox
và PropertyGrid
vào Form1
. Sử dụng mã bên dưới, độ rộng của TextBox
không được ràng buộc để Data.Width
:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Data data = new Data();
data.Text = "qwe";
data.Width = 500;
BindingSource bindingSource = new BindingSource();
bindingSource.Add(data);
textBox1.DataBindings.Add("Text", bindingSource, "Text", true,
DataSourceUpdateMode.OnPropertyChanged);
textBox1.DataBindings.Add("Width", bindingSource, "Width", true,
DataSourceUpdateMode.OnPropertyChanged);
propertyGrid1.SelectedObject = data;
}
}
Mã cho lớp dữ liệu là:
public class Data : IBindableComponent
{
public event EventHandler TextChanged;
private string _Text;
[Browsable(true)]
public string Text
{
get
{
return _Text;
}
set
{
_Text = value;
if (TextChanged != null)
TextChanged(this, EventArgs.Empty);
}
}
public event EventHandler WidthChanged;
private int _Width;
[Browsable(false)]
public int Width
{
get
{
return _Width;
}
set
{
_Width = value;
if (WidthChanged != null)
WidthChanged(this, EventArgs.Empty);
}
}
#region IBindableComponent Members
private BindingContext _BindingContext;
public BindingContext BindingContext
{
get
{
if (_BindingContext == null)
_BindingContext = new BindingContext();
return _BindingContext;
}
set
{
_BindingContext = value;
}
}
private ControlBindingsCollection _DataBindings;
public ControlBindingsCollection DataBindings
{
get
{
if (_DataBindings == null)
_DataBindings = new ControlBindingsCollection(this);
return _DataBindings;
}
}
#endregion
#region IComponent Members
public event EventHandler Disposed;
public System.ComponentModel.ISite Site
{
get
{
return null;
}
set
{
}
}
#endregion
#region IDisposable Members
public void Dispose()
{
throw new NotImplementedException();
}
#endregion
}
Nếu bạn chuyển đổi các thuộc tính Có thể xem là true trên tất cả các bất động sản trong Dữ liệu hoạt động. Bây giờ có vẻ như nguồn dữ liệu tìm kiếm BindingSource theo Thuộc tính có thể duyệt.
Vâng, bạn nói đúng. Dường như nó hoạt động. Tôi có vấn đề này trong một dự án larg. Tôi sẽ cố gắng viết một ví dụ tốt hơn sớm thôi. – bodziec