Изменить состояние кнопки IsEnabled через DataTrigger - PullRequest
0 голосов
/ 23 июля 2011

Я пытаюсь изменить состояние IsEnabled кнопки на основе события TextBox.TextChanged или события ComboBox.SelectionChanged.Я пытался сделать это с событиями, но включенное состояние изменялось загружаемыми данными.Я заполняю сетку UIElement WPF текстовыми полями и комбинированными полями.Сетка заполняется через ItemSource of List.

Мне нужен редактор, содержащий сетку для заполнения данными и состояние включения кнопок «Применить», которое устанавливается на «ложь» до тех пор, пока пользователь не изменит данные текстового поля или поля со списком.В это время DataTrigger должен сработать и изменить btnApply.IsEnabled на true.Я не был уверен, что указывать в качестве значения событий, но «True» просто не был верным, а True и HasChanged не работали.

Я открыт для других подходов, кромеDataTrigger при условии, что IsEnabled имеет значение false по умолчанию, когда элемент управления представлен пользователю.

Вот что у меня есть:

  <UserControl.Resources>
    <Style x:Key="tbChanged" TargetType="{x:Type Button}">
      <Style.Triggers>
        <DataTrigger Binding="{Binding Path=TextBox.TextChanged}" Value="HasChanged">
          <Setter Property="Button.IsEnabled" Value="True"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=ComboBox.SelectionChanged}" Value="HasChanged">
          <Setter Property="Button.IsEnabled" Value="True"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </UserControl.Resources>

  <Button x:Name="btnApply" Content="Apply" Height="22" Width="50" Margin="5,5,0,0"  HorizontalAlignment="Left" VerticalAlignment="Top" IsEnabled="False" Click="btnApply_Click" Style="{StaticResource tbChanged}"/> 

1 Ответ

2 голосов
/ 23 июля 2011

Эти триггеры не подходят для этого, они либо активны, либо неактивны, что означает, что у них есть временная шкала, а у событий - нет.Вы можете использовать интерактивность из Blend SDK , который имеет EventTrigger, который может вызывать ChangePropertyAction, например,

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
<TextBox Name="myTextBox" />
<ComboBox Name="myComboBox" />
<Button IsEnabled="False" Content="Test">
    <i:Interaction.Triggers>
        <i:EventTrigger SourceName="myTextBox" EventName="TextChanged">
            <ei:ChangePropertyAction PropertyName="IsEnabled" Value="True"/>
        </i:EventTrigger>
        <i:EventTrigger SourceName="myComboBox" EventName="SelectionChanged">
            <ei:ChangePropertyAction PropertyName="IsEnabled" Value="True"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...