2013-03-11 4 views
-1

В моем приложении WPF у моего Viewmodel есть логическое свойство IsOwnerOf и строковое свойство Title. Если IsOwner==false, я хочу, чтобы TextBlock отображал Title (потому что, если вы не являетесь владельцем, вы не сможете его отредактировать), и если IsOwner==true, я хочу, чтобы TextBox отображал Title - очевидно, там же, на вид.Показать TextBox или TextBlock в зависимости от значения флага

Также я не хочу, чтобы это было codebehind, так как я следую шаблону MVVM. Мысль о Style.Triggers, но с ними я могу влиять только на атрибуты элемента, а не на сам элемент, или я могу?

EDIT: Практически ответы ниже касаются срабатывания Visibility или IsReadOnly, но я все еще хотел бы получить концептуально лучший ответ! Что делать, если я заменю TextBox соответственно. TextBlock элементами, которые не обладают этими удобными свойствами? Там должно быть лучше, чем создавать как и прячась один из них, что просто не звучит ...

+2

Вы только что рассмотрели TextBox и связать ReadOnly свойство! IsOwnerOf http://msdn.microsoft.com/en-us /library/system.windows.forms.textboxbase.readonly(v=vs.100).aspx – Paparazzi

+0

Вы можете привязать видимость своих элементов управления к логическому свойству. Вот статья, которая поможет вам http://www.rhyous.com/2011/02/22/binding-visibility-to-a-bool-value-in-wpf/ –

+0

Пожалуйста, разместите свою разметку * и * модель представления. Кроме того, прочитайте эту статью, чтобы помочь вам понять, почему есть определенные части на вопрос, который должен существовать (http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question .aspx). –

ответ

1

Самый простой вариант, чтобы всегда уронить TextBox и связать это IsEnabled или IsReadOnly собственности на флаг.

Для достижения этой цели вы также можете использовать DataTemplateSelector.

+0

Несомненно, но TextBox выглядит по-другому, он «предлагает редактируемость» для пользователя, а TextBlock - нет. – EluciusFTW

+0

Спасибо! «DatatemplateSelector» - это решение, которое я искал, т. Е. Создаю два шаблона, один из которых содержит «TextBlock», другой - «TextBox», а затем я выбираю шаблон в соответствии со значением флага. – EluciusFTW

+0

@ToaoG Добро пожаловать. Я хотел бы улучшить ответ и дать пример кода для выбора селектора шаблонов, но я не нашел времени. Я так решил. –

1

Вы можете использовать триггеры для изменения Visibility вашего TextBlock и TextBox с помощью BooleanToVisibilityConverter

+0

Итак, вы предлагаете всегда иметь оба присутствующих и просто жонглировать видимостью в зависимости от значения IsOwnerOf? Это кажется пустой тратой ресурсов, потому что я создаю больше объектов, чем мне нужно, и, следовательно, не лучшая практика. Или это не имеет значения? – EluciusFTW

+0

@ToaoG, я бы сказал, что это не имеет значения. Вы говорите о двух объектах - и имейте в виду, что «TextBlock» даже не имеет дескриптора окна. –

+0

Хорошо, если учесть, что здесь здесь минимальная проблема, но вопрос также имеет более широкий интерес, то есть, что я должен делать в подобной ситуации, где я хочу переключаться между различными элементами в зависимости от значения флага, который не обязательно имеют свойство 'readonly' или' visibility'? Каков самый чистый способ? Это похоже на решение ad hoc, sry. – EluciusFTW

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