Отключить кнопку через привязку данных - PullRequest
0 голосов
/ 25 августа 2011

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

Я пробовал следующее, но оно не работает:

<Button.Style>
  <Style>
   <Style.Triggers>
    <DataTrigger Binding="{Binding ElementName=tv_cats, Path=Items.IndexOf(SelectedItem)}" Value="-1">
     <Setter Property="Button.IsEnabled" Value="false" />
    </DataTrigger>
   </Style.Triggers>
  </Style>
</Button.Style>

для проверки - в коде позади -

tv_cats.Items.IndexOf(tv_cats.SelectedItem).ToString() 

Возвращает -1, если телепрограмма не выбрана, и индекс телепередач, если она есть.

Как я могу использовать это свойство в XAML?

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Пара способов сделать это,

  1. Посредством триггеров на кнопке, которые оценивают свойство selectedItem TreeView (кнопка включена по умолчанию, значение Enabled равно false, когда SelectedItem = "{x: Null} "

  2. Привязка свойства элемента от button.Enabled к TreeView.SelectedItem с помощью преобразователя (реализует IValueConverter), который преобразует существование элемента в логическое значение.

  3. В MVVM у вас может быть открыто свойство ButtonIsEnabled в вашей ViewModel, которое каким-то образом проверяет значение SelectedItem (проще всего связать свойство выбранного элемента TreeViews с другим свойством в VIewModel) и определение включенного состояния из этого.

1 голос
/ 25 августа 2011

Попробуйте следующее:

<Button.Style>  
   <Style >   
      <Style.Triggers>    
           <DataTrigger Binding="{Binding ElementName=tv_cats, Path=SelectedItem}" Value="{x:Null}">     
              <Setter Property="Button.IsEnabled" Value="false" />    
            </DataTrigger>   
       </Style.Triggers>  
   </Style>
</Button.Style>

Убедитесь, что у вас нет явного объявления IsEnabled = "false" в объявлении XAML для кнопок. В противном случае триггер не будет работать.

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