3

我正在尝试通过按钮单击命令以编程方式从面板组件更改 CssStyle 属性“背景颜色”,但没有任何反应。如果我在 ViewModel Load() 方法上设置属性,则可以。页面加载后不会。

DefaultViewModel 类范围:

private Panel p = new Panel();

DefaultViewModel、Load() 方法:

base.Context.View.Children.Add(p);
p.CssStyles.Add("height", "400px");
p.CssStyles.Add("width", "400px");
p.CssStyles.Add("background-color", "#c0c0c0");

按钮点击命令:

p.CssStyles.Remove("background-color");
p.CssStyles.Add("background-color", "#000fff");

有什么我忘记了吗?

我的 dotVVM 版本是 2.2.155.0 Visual Studio 2019 .NET Framework 4.7.2

谢谢你。

4

1 回答 1

0

DotVVM 不能以这种方式工作,控件没有任何状态,因此在命令中操作它们没有多大意义。DotVVM 中的控件只是在第一次请求时发送到客户端的 HTML 的瘦包装器。由于命令不会生成 HTML,因此控件的修改不会传播到浏览器(除非您Postback.Update在控件上使用属性)

您希望将状态存储在视图模型中,然后将其数据绑定到控件。我不确定您到底想做什么,所以假设您想div在某些情况下突出显示 a 。标记(在 dothtml 文件中)可能如下所示:

<div Style-background-color="{value: IsHighlighted ? "#000fff" : "#c0c0c0"}">
    ...
</div>

或者如果您更喜欢使用 css 类,则可以这样

<div Class-highlight="{value: IsHighlighted}">
    ...
</div>

相应的视图模型将只包含该属性IsHighlighted,您的命令将只分配true给它:


public bool IsHighlighted { get; set; }

public void DoSomething() {
    this.IsHighlighted = true;
}

于 2019-11-04T11:06:50.070 回答