2012-05-23 6 views
1

У меня есть форма в моем приложении WPF, что я должен добавить кнопку «Изменить». Прямо сейчас форма всегда находится в режиме редактирования, и нет режима просмотра. Однако по разным причинам мне нужно сохранить режим контроля в режиме просмотра до тех пор, пока пользователь не нажмет кнопку «Изменить», а затем не скроет кнопку «Редактировать» и не отобразит кнопку «Сохранить» на своем месте.Может ли результат преобразования MultiValueConverter быть преобразован?

У моей формы уже есть bool DependencyProperty, называемый CanModify, что верно, когда разрешения пользователя дают им право редактировать запись, отображаемую в форме. Я добавляю новый bool DependencyProperty под названием InEditMode, который по умолчанию будет false. Скрытие и включение кнопок довольно прямолинейно, но у меня есть этот элемент управления ComboBox, который я хочу скрыть, если пользователь не может редактировать запись, или если они могут ее редактировать, а форма находится в режиме просмотра. Для этого мне нужно преобразовать результат ANDing двух свойств bool вместе, а затем преобразовать его в значение Visibility.

У меня уже есть класс, который реализует IValueConverter и преобразует bool в Visibility. Я только что написал класс, который реализует IMultiConverter, который принимает массив bools и ANDS их вместе (или ORs их, в зависимости от значения параметра).

Что бы я хотел сделать, это взять результат IMultiConverter и поместить его через IValueConverter, чтобы преобразовать результат в Visibility. Я могу это сделать? Или мне было бы лучше делать И в коде позади нового DependencyProperty?

Tony

ответ

0

Поскольку вы не можете подключить преобразователи, я добавил еще одно булево свойство в свой класс. Я добавил методы к двум свойствам, новый зависит от того, которые вызываются при их изменении. Они пересчитывают значение нового свойства. Затем я использовал свой исходный логический конвертер для преобразования видимости, чтобы показать или скрыть рассматриваемый элемент управления.

1

Вы не можете конвертировать цепи.

Вместо этого измените свой MultiValueConverter, чтобы взять строковый параметр «bool» или «visibility». В зависимости от параметра возвращают либо объект bool, либо объект видимости

+0

Это интересный взгляд по проблеме. Я закончил тем, что добавил еще одно логическое свойство, значение которого задано, когда два других свойства меняют свое значение. Я не отмечаю ваш ответ как ответ, потому что это не то, что я сделал, однако, я даю вам верхнюю часть из-за первой строки вашего ответа. Мой конвертер уже использует параметр для передачи «AND» или «OR» для операции, используемой при объединении bools, привязанных к MultiBinding. –

2

Вы действительно можете конвертировать цепи, мой собственный пример еще не имеет отношения к MultiValueConverters, но не должно быть слишком сложно реализовать LinkedMultiValueConverter. Одним из недостатков этого подхода является то, что вам придется воссоздать любые конвертеры, которые вы в настоящее время должны использовать предоставленный атрибут.

мерзавец: //github.com/pmacn/ValueConverters.WP8.git

или

https://github.com/pmacn/ValueConverters.WP8

, а затем вы могли бы сделать следующее

<con:LinkedConverter x:Name="MyFancyLinkedConverter"> 
    <con:BooleanInversionConverter /> 
    <con:BooleanToVisibilityConverter /> 
</con:LinkedConverter> 
+0

Аккуратный код. Из этой возможности этой возможности нет, но у вас есть очень умная идея. –

+0

Это не работает для вас?Я должен буду сделать правильную фиксацию, когда я вернусь с работы сегодня (вместо того, чтобы возиться в github ui), я обновлю, как только у меня есть. –

+0

Я не использую ваш код. У меня есть что-то, что работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^