我目前正在使用异步并等待C#,我想创建一个更新UI的方法,而不会遇到跨线程更新的问题。这就是我现在所拥有的
模特课:
public class UIModel
{
public string ControlId { get; set; }
public Type TypeOfControl { get; set; }
public string PropertyName { get; set; }
public object Data { get; set; }
public Type TypeOfData { get; set; }
}
UI更新程序方法:
private void UIUpdater(UIModel model)
{
var control = this.Controls.Find(model.ControlId, true).FirstOrDefault() as model.TypeOfControl.GetType(); // <- not valid
// set control's model.PropertyName using model.Data
}
但我似乎无法使该方法工作,如何根据UIModel中定义的控件类型将通用控件转换为文本框或DataGridView。
还有如何根据UIModel中定义的属性名称为该控件设置属性?
UIModel的例子:
new UIModel()
{
ControlId = "textBox1",
TypeOfControl = typeof(TextBox),
PropertyName = "Text",
Data = "The quick brown fox jumps over the lazy dog.",
TypeOfData = typeof(string)
};
new UIModel()
{
ControlId = "button1",
TypeOfControl = typeof(Button),
PropertyName = "Enabled",
Data = false,
TypeOfData = typeof(bool)
};
答案 0 :(得分:1)
var control = this.Controls.Find(model.ControlId, true).FirstOrDefault() as model.TypeOfControl.GetType()
上面的代码会给您一个错误,因为as
运算符需要as
关键字之后的类型而不是表达式。
来自C#规范:
在E形式的操作中,E必须是表达式,T必须是引用类型,已知为引用类型的类型?参数或可空类型。
您可以使用Controls
过滤FirstOrDefault
集合。我尝试了下面的代码,它可以处理您提供的数据,正确设置Text
的{{1}}属性。
TextBox