2013-05-27 4 views
0

Я хочу установить видимость элементов TextBox на основе их привязок.
Пример: TextBoxes со значениями цен для двух продуктовУстановить видимость элемента по значению модели

<TextBox Grid.Column="1" Grid.Row="3" Text="{Binding PriceProduct0, Mode=TwoWay}" /> 
<TextBox Grid.Column="2" Grid.Row="3" Text="{Binding PriceProduct1, Mode=TwoWay}" /> 

В моей модели я запрашиваю необходимые значения из службы WCF и вызвать NotifyPropertyChanged обновить свою точку зрения.
Проблема: в некоторых сценариях нет значений для моих свойств. В этом случае я хочу скрыть элемент пользовательского интерфейса. Есть ли простой способ, может быть, подняв событие?

Большинство свойств являются двойными или булевыми, поэтому я не могу установить их NULL.

Решения:
Я нашел решение, благодаря Ахмеду и DHN!
Здесь все шаги:

  1. Изменить все Ненулевые свойства к nullables, например, public double? PriceProduct0
  2. Добавить ссылку на следующий .dll, если вы не можете найти пространство имен Microsoft.TeamFoundation.Controls.WPF.Converters:
    <VSHome>\Common7\IDE\PrivateAssemblies\Microsoft.TeamFoundation.Controls.dll
  3. Добавить xmlns:myConverters="clr-namespace:Microsoft.TeamFoundation.Controls.WPF.Converters;assembly=Microsoft.TeamFoundation.Controls" атрибуту <Page>
  4. Добавить <Page.Resources>
    <myConverters:NullToVisibleConverter x:Key="NullToVisibleConverter" />
    </Page.Resources>
  5. Добавить следующую видимость параметр к атрибуту <TextBox>:
    Visibility="{Binding PriceProduct0, Converter={StaticResource NullToVisibleConverter}, ConverterParameter='invert' }"

ответ

4

Вы можете использовать null для конвертера видимости. См. Это link

<TextBox Text="{Binding PriceProduct0}" Visibility="{Binding PriceProduct0, Mode=TwoWay, Converter={StaticResource NullToVisibilityConverter}}"/> 
+0

+1 - Ницца, не знал, что есть класс из коробки. – DHN

+0

Спасибо Ahmed и DHN, но мои свойства в основном двойные или логические. Поэтому я не могу установить их NULL или я понял sth. неправильно? – user60333

+1

Нашли решение, изменив их на Nullable (см. Мой пост) – user60333

1

Ничего проще, как это. Просто введите NullToVisibleConverter и привяжите его к свойству Visibility элемента интерфейса. Например.

<Window> 
    <Window.Resources> 
     <NullToVisibleConverter x:Key="Null2VisConv"/> 
    </Window.Resources> 
<TextBox Visibility="{Binding PriceProduct0, Converter={StaticResource Null2VisConv}}" .../> 
</Window> 
Смежные вопросы