1
私はICustomTypeDescriptorを実装するモデルを持っています。これは、オブジェクトにないカスタムプロパティを追加してテキストボックスにバインドできるようにするためです。奇妙な部分は、バインディングがPropertyGridには効果がありますが、テキストボックスには効果がないことです。ICustomTypeDescriptorテキストボックスへのデータバインド
このコードは動作します:
DynamicClass<ExtensionModel> binder = new DynamicClass<ExtensionModel>(ext);
propertyGrid1.SelectedObject = binder;
ではなく、彼の1:
この場合var binder = new DynamicClass<ExtensionModel>(ext);
_versionLabel.DataBindings.Add("Text", binder, "SelectedVersion", false, DataSourceUpdateMode.OnPropertyChanged);
私は、オブジェクトがターゲットの型と一致していません取得します。例外。私はバインドの代わりにextを置く場合、それはうまく動作します。
テキストボックスのバインディング機能に問題はありますか?
DynamicClassのための私のコードは次のとおりです。
public class DynamicClass<T> : ICustomTypeDescriptor
{
private readonly T _object;
public DynamicClass(T trackedObject)
{
_object = trackedObject;
}
// Collection to code add dynamic properties
public KeyedCollection<string, DynamicProperty> Properties { get; private set; }
// ICustomTypeDescriptor implementation
AttributeCollection ICustomTypeDescriptor.GetAttributes()
{
return TypeDescriptor.GetAttributes(_object, true);
}
string ICustomTypeDescriptor.GetClassName()
{
return TypeDescriptor.GetClassName(_object, true);
}
string ICustomTypeDescriptor.GetComponentName()
{
return TypeDescriptor.GetComponentName(_object, true);
}
TypeConverter ICustomTypeDescriptor.GetConverter()
{
return TypeDescriptor.GetConverter(_object, true);
}
EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()
{
return TypeDescriptor.GetDefaultEvent(_object, true);
}
PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()
{
return TypeDescriptor.GetDefaultProperty(_object, true);
}
object ICustomTypeDescriptor.GetEditor(Type editorBaseType)
{
return TypeDescriptor.GetEditor(_object, editorBaseType, true);
}
EventDescriptorCollection ICustomTypeDescriptor.GetEvents()
{
return TypeDescriptor.GetEvents(_object, true);
}
EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes)
{
return TypeDescriptor.GetEvents(_object, attributes, true);
}
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()
{
return TypeDescriptor.GetProperties(_object, true);
}
PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes)
{
return TypeDescriptor.GetProperties(_object, attributes, true);
}
object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd)
{
return _object;
}
}
カスタム記述子は表示できますか? (特にSelectedVersionの場合)一般的にこれはうまくいくはずです(私はたくさんの狂ったカスタム記述子の処理をしました)ので、私の勇気は言っています: –
も表示されていないコードのバグ、 "textbox" ComboBoxに拘束力があるようです...? –
ここでコードを追加します。申し訳ありませんが、間違ったコピー/貼り付けでバインド:( –