gpt4 book ai didi

c# - 如何获取绑定(bind)对象的属性?

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:46 25 4
gpt4 key购买 nike

我有一个 User 类:

public partial class User : INotifyPropertyChanged
{
private string forename;

[MaxLength(10)]
public string Forename
{
get => forename;
set
{
forename = value;
OnPropertyChanged("forename");
}
}

public User(string forename)
{
Forename = forename;
}
}

我还有一个 TextBoxTextBoxText 属性绑定(bind)到 User 对象:

textBox.DataBindings.Add("Text", new User("Michael"), "Forename");

我想通过 TextBox 获取 ForenameMaxLength 属性。如何做到这一点?


注意:上面的代码是我真实代码的简化。

最佳答案

您可以使用反射或类型描述符来获取有关类型的信息。您需要在何时何地执行此操作取决于实现情况。

由于数据绑定(bind)的数据源可以是类或绑定(bind)源等任何对象,因此依赖类型描述符更加灵活和可扩展。例如,如果你想通过将 TextBox 传递给方法来调用一个方法来应用 maxlength,如下所示:

ApplyMaxLengthToTextBox(textBox1);

然后你可以这样创建方法:

//using System.Linq;
public void ApplyMaxLengthToTextBox(TextBox txt)
{
var binding = txt.DataBindings["Text"];
if (binding == null)
return;
var bindingManager = binding.BindingManagerBase;
var datasourceProperty = binding.BindingMemberInfo.BindingField;
var propertyDescriptor = bindingManager.GetItemProperties()[datasourceProperty];
var maxLengthAttribute = propertyDescriptor.Attributes.Cast<Attribute>()
.OfType<MaxLengthAttribute>().FirstOrDefault();
if (maxLengthAttribute != null)
txt.MaxLength = maxLengthAttribute.Length;
}

在绑定(bind)到一个对象时测试它:

textBox1.DataBindings.Add("Text", new MySampleModel(), "SomeProperty");
ApplyMaxLengthToTextBox(textBox1);

在绑定(bind)到 BindingSource 时测试它:

var bs = new BindingSource();
bs.DataSource = new MySampleModel();
textBox1.DataBindings.Add("Text", bs, "SomeProperty");
ApplyMaxLengthToTextBox(textBox1);

关于c# - 如何获取绑定(bind)对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com