Я бы хотел динамически обновлять определенные части Grid
различными способами.Рассмотрим следующий игрушечный пример: у меня есть две строки: одна должна обновляться одна за другой ( a , b , c ), так как эти символы зависятна разных триггерах;вторая строка зависит от одного отдельного триггера ( show ), который позволяет отображать / скрывать некоторые данные.
Теперь я знаю, что могу обернуть всю структуру Grid
в Dynamic
, идаже указать, какие символы отслеживать, таким образом, этот пример выполняет то, что я хочу:
Checkbox[Dynamic[show]]
test = {0, 0};
Dynamic[Grid[{{Dynamic@a, Dynamic@b, Dynamic@c},
If[show, Prepend[test, "test:"], {}]}, Frame -> All],
TrackedSymbols :> {show}]
Хотя по определенным причинам Я хотел бы иметь локально указанный Dynamic
, который применяется только ко второму ряду Grid
.
Для тех, кому интересно, какой это будет безбожная ситуация, просто представьте следующее: show
используется в любом изa
, b
или c
, и я НЕ хочу обновлять их при изменении show
, их изменения зависят от других триггеров.Почему бы тогда не удалить show
из символов первого ряда?Представьте себе, я не могу, поскольку show
присутствует в функции, которая используется в a
, b
или c
, и к этой функции я не могу получить легкий доступ.
Конечно, переносПервый аргумент If
в Dynamic
здесь не поможет, так как сам Grid
или любая из его ячеек не станут динамическими:
Grid[{
{Dynamic@a, Dynamic@b, Dynamic@c},
If[Dynamic@show, Prepend[test, "test:"], {}]
}, Frame -> All]
Кроме того, перенос строки в Dynamic
делает указанную строку недействительной, так как она больше не имеет заголовка List
:
Grid[{
{Dynamic@a, Dynamic@b, Dynamic@c},
Dynamic@If[show, Prepend[test, "test:"], {}]
}, Frame -> All]
Отображение Dynamic
на строку также не работает, поскольку show
не обновляется динамически:
Grid[{
{Dynamic@a, Dynamic@b, Dynamic@c},
Dynamic /@ If[show, Prepend[test, "test:"], {}]
}, Frame -> All]
Также работает обтекание Dynamic[If[...]]
вокруг членов списка, но теперь я должен оценивать If
3 раза, а не только 1.
Grid[{
{Dynamic@a, Dynamic@b, Dynamic@c},
Dynamic[If[show, #, ""]] & /@ Prepend[test, "test:"]
}, Frame -> All]
Хотелось бы узнать, есть лиРешение этой конкретной проблемы путем локального применения оболочки Dynamic
к строке.