Я пытаюсь создать CustomControl, который будет иметь различные свойства, затронутые перечислением, найденным в ViewModel. Созданный CustomControl вызывается в представлении.Привязка функции CustomControl DependencyProperty к перечислению ViewModel
Я хотел бы перечисление привязки, чтобы изменить пару вещей в контроле, они включают в себя:
- Изменение источника изображения (изображения изменяется на статичны в папке, созданной внутри библиотеки CustomControl)
- Изменять свойство TextBlocks Text, опять же, параметры текста будут статическими между одним из X случаев (X - количество возможных состояний перечисления (также не изменяется)).
Имейте в виду, что эти два DP будут связаны, например. если связанное перечисление - это случай x, источник изображения изменит и отображаемый текст. В принципе, два открытых DP здесь будут привязаны к тому же перечислению, но используйте его по-разному.
Итак, мой вопрос является то, что будет лучшим способом осуществить то, что описано выше?
Я уже думал о двух возможных путях:
- Expose полезных типов DP и связывают эти свойства в том же перечисление (например, property1 = "{Binding} someEnum" свойство2 = "{Binding} someEnum"), а также предоставить ValueConvertor для преобразования этих перечислений в полезные типы, которые затем может использовать CustomControl,
- Или выведите один DP, который принимает перечисление, а затем изменит свойства в другом месте в коде CustomControl, в зависимости от значения связанное перечисление?
Я довольно удобен с выполнением опции 1 с преобразователем значений в файле кода представления. Тем не менее, я хотел бы избежать этого, так как это сделает управление менее независимым.
Что касается второго варианта, я не совсем уверен, как это сделать так, чтобы статьи или небольшое объяснение помогли бы, если вы считаете, что это путь - возможно, внедрение INoitifyPropertyChanged на DP, чтобы контроль знал его ценность был изменен, когда изменено перечисление Bound?
Кроме того, я не ограничиваюсь этим, описанным двумя способами, если вы чувствуете, что есть лучший способ, пожалуйста, предложите это!
Я использую WPF (C#) совместно с MVVM-архитектурой (MVVM Light Toolkit).
Быстрое примечание. Я бы хотел избежать изменения ViewModel. Открытое перечисление и вся логика должны оставаться такими, какие они есть, если абсолютно не необходимо!
Заранее благодарим за ваши ответы, и я попытаюсь как можно подробнее обновить этот вопрос с ответами и обновлениями относительно личного прогресса в этой проблеме, а также возможной дополнительной информации, которая была запрошена!
Большое спасибо за быстрый ответ. Только один вопрос, используя предложенный метод, должен ли я создать дублированный список перечислений для того, который находится в моей модели ViewModel в коде CustomControls, так что оба они содержат одни и те же элементы? – user1467655
Нет, вы привяжете свое новое свойство зависимостей к ViewModel. Связывание - это способ создания связи между целью и источником, поэтому вам не придется дублировать что-либо. –
Проблема в том, что я не знаю, какой тип назначить DependencyProperty, когда я его создаю, поскольку тип перечисления в виртуальной машине не доступен в моем CustomControl. 'DependencyProperty.Register (« MyProperty », typeof (EnumType), typeof (MyClass), новый PropertyMetadata (новый PropertyChangedCallback (MyPropertyChangedHandler));' - Что нужно заменить здесь «EnumType»? Извините за мое замешательство! – user1467655