繁体   English   中英

Dotvvm运行时绑定到“对象”类型

[英]Dotvvm run-time binding to 'object' type

我有这堂课

public class Property{
     public string Name {get;set;}
     public object Value {get;set;} 
}

我想创建上述类的名单List<Property>和动态添加标记控制代码而已,所以他们的网站,他们有一个例子这里和我的所作所为向实例添加类型的公共财产PropertyTextBoxWithLabel类并更改了上述示例中用于绑定的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 PropertyValue属性仍然为null ,这是我被卡住的地方,我也尝试调试setter ,结果发现它没有到达那里,所以运行有问题时间绑定,这是这行代码的“作为示例”

textBox.SetBinding(TextBox.TextProperty, GetValueBinding(TextProperty));

任何帮助将不胜感激:)

编辑:

为了得到更多的澄清,我有一个名为MainAppPage和Markup Control的页面,其代码简单地称为ContentControlMainAppPageMainAppPage <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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM