Лучший способ, чтобы TextBox показывал сообщение, основанное на bool в ModelView - PullRequest
0 голосов
/ 10 июня 2011

У меня есть TextBox, которому нужно изменить цвет рамки, а затем отобразить сообщение под текстовым полем.Это сообщение должно отображаться / скрываться в зависимости от значения bool в модели.Каков наилучший способ добиться этого?

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Существует множество способов сделать это. Если вы собираетесь сделать это только один раз, самый простой способ - добавить TextBlock к макету и использовать стиль, чтобы скрыть его, например ::

.
<StackPanel>
   <TextBox Text="{Binding Text, Mode=TwoWay}">
      <TextBox.Style>
         <Style TargetType="TextBox">
            <Setter Property="BorderBrush" Value="Lightgray"/>
            <Style.Triggers>
               <DataTrigger Binding="{Binding IsValid}" Value="False">
                  <Setter Property="BorderBrush" Value="Red"/>
               </DataTrigger>
            </Style.Triggers>
         </Style>
      </TextBox.Style>
   </TextBox>
   <TextBlock Text="This is the message displayed if IsValid is false.">
      <TextBlock.Style>
         <Style TargetType="TextBlock">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
               <DataTrigger Binding="{Binding IsValid}" Value="False">
                  <Setter Property="Visibility" Value="Visible"/>
               </DataTrigger>
            </Style.Triggers>
         </Style>
       </TextBlock.Style>
   </TextBlock>
</StackPanel>

Если это то, что вы хотите повторить, вы захотите превратить это в шаблон или пользовательский элемент управления.

Также обратите внимание, что изменение видимости со свернутой на видимую изменит общую компоновку, что может привести к нежелательным эффектам. В зависимости от вашего дизайна вы можете сделать видимость по умолчанию скрытой.

0 голосов
/ 10 июня 2011

Вы можете использовать DataTrigger, чтобы установить текст, видимость и внешний вид текстового поля на основе значения в ViewModel. Это кажется самым простым решением.

<TextBox>
   <TextBox.Style>
       <Style TargetType="TextBox">
           <Style.Triggers>
                <DataTrigger Binding="{Binding Path=TheBoolean}" Value="True">
                     <Setter Property="Visibility" Value="Visible" />
                     <Setter Property="Background" Value="Red" />
                     ...
                </DataTrigger>
           </Style.Triggers>
       </Style>
   </TextBox.Style>
</TextBox>

Другой вариант - создать IValueConverter для преобразования bool для получения текста, видимости и цвета.

...