DotVVM Изменение свойства CssStyle из компонента Panel во время выполнения не работает - PullRequest
2 голосов
/ 31 октября 2019

Я пытаюсь программным способом изменить свойство CssStyle, 'background-color', из компонента Panel с помощью команды нажатия кнопки, но ничего не происходит. Если я устанавливаю свойство на метод 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

Спасибо.

1 Ответ

0 голосов
/ 04 ноября 2019

DotVVM не работает таким образом, элементы управления не имеют никакого состояния, и, следовательно, манипулирование ими в командах не имеет особого смысла. Элементы управления в DotVVM - это просто тонкие обертки вокруг HTML, которые отправляются клиенту при первом запросе. Поскольку в командах не генерируется HTML, изменения элементов управления не распространяются на браузер (кроме случаев использования свойства Postback.Update в элементе управления)

Вы хотите сохранить состояние в модели представления, а затемданные связывают это с контролем. Я не уверен, что именно вы хотите сделать, поэтому предположим, что в некоторых случаях вы хотите выделить div. Разметка (в файле 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;
}

...