Я хотел бы обновить определенные части a 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}]
Хотя для определенные причины Я хотел бы иметь локально определенный динамический
, который применяется только ко второй строке сетки
.
Для тех, кто задается вопросом, какая это будет безбожная ситуация, представьте себе следующее: show
используется в любом из a
, b
или ] c
, и я НЕ хочу обновлять, когда show
изменяется, их изменения зависят от других триггеров. Почему бы тогда не убрать show
из символов первой строки? Представьте, я не могу, поскольку показывает, что
присутствует в функции, которая используется в a
, b
или c
, и это функция Я не могу легко получить доступ.
Конечно, перенос первого аргумента If
в Dynamic
здесь не поможет, поскольку сама Grid
или любая из ее ячеек не станут dynamic:
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 раза вместо одного.
Grid[{
{Dynamic@a, Dynamic@b, Dynamic@c},
Dynamic[If[show, #, ""]] & /@ Prepend[test, "test:"]
}, Frame -> All]
Хотел бы знать, есть ли какое-либо решение для преодоления этой конкретной проблемы путем локального применения динамической
оболочки для строки.