C #: Как привязать кнопку. Включено, если какой-либо элемент выбран из ListView - PullRequest
2 голосов
/ 24 октября 2010

У меня есть вопрос о Control.DataBindings.

Как я могу связать Button.Enabled, если какой-либо элемент выбран из ListView? i.e.:

Button.Enabled = ListView.SelectedItems.Count > 0;

Я знаю, что могу использовать событие ListView.SelectionChanged для этого.

Мне просто интересно, как я могу использовать DataBinding для выполнения той же работы.

Спасибо.

Peter

P.S .: Причина, по которой я хочу это сделать: если Button.Enabled зависит от условий множества других элементов управления, я думаю, что DataBinding проще.

Ответы [ 2 ]

1 голос
/ 24 октября 2010

Если вы хотите использовать привязки, вам нужно создать ValueConverter.Это делается путем реализации интерфейса System.Windows.Data.IValueConverter (на странице MSDN приведен пример реализации).В нем вы бы вернули true, если переданный int больше 0.

В вашем случае вы бы связали Button.Enabled с ListView.SelectedItems.Count и указали бы свой конвертер значений.

Как сказал @PaulG в комментариях, возможно, проще использовать событие SelectionChanged, но это можно сделать с помощью привязок.

0 голосов
/ 24 октября 2010

Обычно я сначала пробую триггеры, а затем преобразователи значений.
В этом случае вам не нужно реализовывать конвертер значений, простой DataTriggger сделает:

<Button>
  <Button.Style>
    <Style TargetType="{x:Type Button}">
      <Style.Setters>
        <Setter Property="Content" Value="Enabled When Selection Changed"/>          
      </Style.Setters>
      <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=_listBox, Path=SelectedItems.Count}"
                     Value="0">
          <Setter Property="IsEnabled" Value="False"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>
<ListBox x:Name="_listBox">
  <ListBox.Items>
    <ListBoxItem Content="1"/>
    <ListBoxItem Content="2"/>
  </ListBox.Items>
</ListBox>
...