Ich versuche System.Windows.Forms.PropertyGrid
zu verwenden.Warum Browsable-Attribut macht Eigenschaft nicht bindbar?
Um eine Eigenschaft in diesem Gitter nicht sichtbar zu machen, sollte BrowsableAttribute
auf false
eingestellt werden. Das Hinzufügen dieses Attributs macht die Eigenschaft jedoch nicht bindbar.
Beispiel: Erstellen eines neuen Windows Forms-Projekt und ein TextBox
und PropertyGrid
auf Form1
fallen. Verwenden Sie den Code unten, die Breite des TextBox
erhält nicht zu Data.Width
gebunden:
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;
}
}
Der Code für die Datenklasse ist:
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
}
Wenn Sie schalten Sie das Browsable Attribut auf true auf jede Eigenschaft in Daten funktioniert es. Nun scheint es, als ob BindingSource die Datenquelle nach dem Browsable-Attribut durchsucht.
Ja, Sie haben Recht. Es scheint zu funktionieren. Ich habe dieses Problem in einem großen Projekt. Ich werde versuchen, bald ein besseres Beispiel zu schreiben. – bodziec