Поле комбинированного списка/Поле списка WPF с MultiSelect на основе Перечисления с Флагами

Я соглашаюсь с Chris Roberts, , OSCommerce является хорошим местом для запуска, а также DatabaseAnswers.org .

Hope, которая помогает.

5
задан sohum 10 October 2009 в 05:14
поделиться

1 ответ

У меня есть способ, который может сработать. Я не беру на себя ответственность за это - я нашел этот метод в Интернете и забыл сохранить адрес.

В моем проекте мне нужно было привязать несколько флажков к перечислению флагов. Чтобы помочь, я нашел реализацию простого преобразователя значений для облегчения двусторонней привязки. Он не универсален, и один экземпляр конвертера может работать только с одной целью (то есть с одним экземпляром значения и его группой флажков) за раз. Конвертер использует сохраненную ссылку на значение как способ обратного преобразования, поэтому, если вы попытаетесь повторно использовать его между отдельными экземплярами объекта, это не сработает. Тем не менее, это единственное использование, которое у меня было для чего-то подобного, и это работало как шарм.

Конвертер:

/// <summary>
/// Provides for two way binding between a TestErrors Flag Enum property and a boolean value.
/// TODO: make this more generic and add it to the converter dictionary if possible
/// </summary>
public class TestActionFlagValueConverter : IValueConverter {
    private TestErrors target;

    public TestActionFlagValueConverter() {

    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        TestErrors mask = (TestErrors)parameter;
        this.target = (TestErrors)value;
        return ((mask & this.target) != 0);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        this.target ^= (TestErrors)parameter;
        return this.target;
    }
}

В xaml он используется следующим образом: но вы все равно можете видеть, что привязка работает правильно (отметьте оба, затем снимите отметку с того, который вы проверили последним - значение строки изменится на другое, а не на 0).

4
ответ дан 15 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

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