Для этого вам понадобятся IMultiValueConverter
и MultiBinding
Примечание : Возможно, вам придется настроить конвертер на лучше соответствует вашим потребностям
Вариант 1 :
Недостаток: вы должны вернуть свой фон «по умолчанию» тоже
Конвертер:
[110 ]
Использование:
This matches
Вариант 2: Использование Trigger
внутри конвертера Style
:
public class DistinctValuesMultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values.Distinct().Count() == 1;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Стиль:
Использование:
This matches
Вариант 3 (только для вашей информации): : Вы также можете использовать Behavior
При использовании.Net 3.5 попробуйте HashSet. Если Вы не используете.Net 3.5, попробуйте C5. Иначе Ваш существующий метод в порядке (bool, как @leppie предполагает, лучше, или не, как @JonSkeet предполагает, серовато-коричневый серовато-коричневый серовато-коричневый!).
HashSet<string> stringSet = new HashSet<string>(someStringCollection);
if (stringSet.Contains(someString))
{
...
}
Можно использовать HashSet<T>
в.NET 3.5, еще я просто придерживался бы Вас существующий метод (на самом деле, я предпочту Dictionary<string,bool>
но у каждого не всегда есть та роскошь).
Я должен, вероятно, сделать это вопросом, потому что я вижу проблему так часто. Что заставляет Вас думать, что словари являются O (1)? Технически, единственной вещью, вероятно, чтобы быть чем-то как O (1) является доступ в стандарт индексированный целым числом фиксировано-ограниченный массив с помощью целочисленного индексного значения (там являющийся никаким поиском в массивах, реализовал тот путь).
Предположение, что, если это похоже на ссылку на массив, это - O (1), когда "индекс" является значением, которое должно искаться так или иначе, однако негласно, означает, что это маловероятно схема O(1), если Вам не посчастливилось получить хеш-функцию с данными, которые не имеют никаких коллизий (и вероятно много потраченных впустую ячеек).
Я вижу эти вопросы, и я даже вижу ответы, что заявление O (1) [не по этому конкретному вопросу, но я действительно кажусь ими вокруг] без выравнивания или объяснения того, что требуется, чтобы удостоверяться, что O (1) на самом деле достигается.
Хм, я предполагаю, что это - достойный вопрос. Я сделаю это после того, как я отправлю этот комментарий здесь.
что-то, что Вы могли бы хотеть добавить, является начальным размером к Вашему хешу. Я не уверен, реализован ли C# по-другому, чем Java, но он обычно имеет некоторый размер по умолчанию, и если Вы добавляете больше, чем которые, он расширяет набор. Однако правильно размерный хеш важен для достижения максимально близко к O (1). Цель состоит в том, чтобы получить точно 1 запись в каждом блоке, не делая это действительно огромным. Если Вы делаете некоторый поиск, я знаю, что существует предложенное отношение для калибровки хеш-таблицы, предполагая, что Вы знаете заранее, сколько элементов Вы будете добавлять. Например, что-то как "хеш должно быть измерено в 1.8x число элементов, которое будет добавлено" (не реальное отношение, просто пример).
Из Википедии:
С хорошей хеш-функцией хеш-таблица может обычно содержать приблизительно на 70%-80% больше элементов, чем она действительно представляет слоты в виде таблицы и все еще работает хорошо. В зависимости от механизма разрешения коллизий производительность может начать страдать или постепенно или существенно поскольку добавляется больше элементов. Для контакта с этим, когда коэффициент загрузки превышает некоторый порог, необходимо выделить новую, большую таблицу и добавить все содержание исходной таблицы к этой новой таблице. В классе HashMap Java, например, порог коэффициента загрузки по умолчанию 0.75.