[英]Dotvvm run-time binding to 'object' type
我有这堂课
public class Property{
public string Name {get;set;}
public object Value {get;set;}
}
我想创建上述类的名单List<Property>
和动态添加标记控制代码而已,所以他们的网站,他们有一个例子这里和我的所作所为向实例添加类型的公共财产Property
的TextBoxWithLabel
类并更改了上述示例中用于绑定的setter
,如下所示:
[MarkupOptions(AllowHardCodedValue = false)]
public string Text
{
get { return (string)GetValue(TextProperty); }
set {
SetValue(TextProperty, value);
Property.Value = value;
}
}
public static readonly DotvvmProperty TextProperty
= DotvvmProperty.Register<string, TextBoxWithLabel>(c => c.Text, "");
当我运行应用程序并在输入字段中键入内容时,Type Property
的Value
属性仍然为null
,这是我被卡住的地方,我也尝试调试setter
,结果发现它没有到达那里,所以运行有问题时间绑定,这是这行代码的“作为示例”
textBox.SetBinding(TextBox.TextProperty, GetValueBinding(TextProperty));
任何帮助将不胜感激:)
编辑:
为了得到更多的澄清,我有一个名为MainAppPage
和Markup Control的页面,其代码简单地称为ContentControl
, MainAppPage
在MainAppPage
<controls:ContentControl Instance="{value: ClassObject}"/>
使用List<Property>
传递给ContentControl
然后ContentControl
开始进行迭代通过List<Property>
并创建从HtmlGenericControl
派生的InputField
。
InputField
的呈现就像ContentControl
的魅力一样,是唯一的不起作用,这是绑定,因此,再次如何将Property.Value
绑定到InputField.Text
以便用户在UI中发生的任何更改都会在InputField
像其他对象一样InputField
焦点之后反映到Property.Value
其他MVVM模式?
DotVVM不使用设置程序分配给属性,而是在DotvvmBindableObject
设置基础属性存储。 WPF对其DependencyProperty
的操作非常类似,它需要表示数据绑定。 实际上,您可以完全省略C#属性声明,声明字段TextProperty
并调用DotvvmProperty.Register就足以为dotvvm声明属性。
其他“问题”是控件不存储任何数据,所有内容都必须保留在视图模型中。 您只能使用控件属性对视图模型属性进行数据绑定。 我认为我们在这里遇到了XY问题 ,我只能说出您的代码为什么不起作用,但是我不知道实际上在试图做什么。
无论如何,如果您只是想将控件“绑定”到视图模型属性,请查看https://www.dotvvm.com/docs/tutorials/control-development-markup-controls-with-code/2.0 。 您可以这样声明属性:
[MarkupOptions(AllowHardCodedValue = false)]
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DotvvmProperty TextProperty
= DotvvmProperty.Register<string, TextBoxWithLabel>(c => c.Text, "");
在控件的标记中使用它
@baseType FullName.Of.YourControl
{{value: _control.Text}}
并使用页面中的控件(或其他控件)
<cc:YourControl Text="{value: _this.Property.Value}" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.