как использовать DynamicResource в коде позади?

Для простых конкатенаций как:

String s = "a" + "b" + "c";

довольно бессмысленно использовать StringBuffer - в качестве [1 110], jodonnell указал, что это будет энергично переведено в:

String s = new StringBuffer().append("a").append("b").append("c").toString();

, НО это очень непроизводительно для конкатенации строк в цикле, как:

String s = "";
for (int i = 0; i < 10; i++) {
    s = s + Integer.toString(i);
}

Используя строку в этом цикле генерирует 10 промежуточных строковых объектов в памяти: "0", "01", "012" и так далее. При записи того же использования StringBuffer Вы просто обновляете некоторый внутренний буфер StringBuffer, и Вы не создаете те, промежуточная строка возражает, что Вам не нужно:

StringBuffer sb = new StringBuffer();
for (int i = 0; i < 10; i++) {
    sb.append(i);
}

На самом деле для примера выше Вас должен использовать StringBuilder (представленный в Java 1.5) вместо StringBuffer - StringBuffer, немного более тяжело, поскольку все его методы синхронизируются.

6
задан Dave Clemmer 28 August 2011 в 19:33
поделиться

2 ответа

Статический ресурс не будет обновляться независимо от того, делаете ли вы это в коде или XAML. Для этого вам понадобится динамический ресурс.

В XAML:

<Grid x:Name="grid" Background="{DynamicResource Brush}"/>

В коде:

grid.SetResourceReference(Grid.BackgroundProperty, "Brush");
13
ответ дан 8 December 2019 в 17:23
поделиться

Имейте в виду, что DynamicResource недоступен в Silverlight; это только в WPF (Silverlight имеет только StaticResource).

Поскольку вы отметили свой вопрос как Silverlight, так и WPF, я подозреваю, что вы, возможно, ищете решение, которое работает в обоих. В этом случае вы, вероятно, захотите использовать привязку данных вместо ресурсов, поскольку вам требуется, чтобы свойство обновлялось в ответ на изменения.

1
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: