2013-07-13 4 views
0

В настоящее время у меня есть следующие DataTrigger:WPF DataTrigger на кнопке на основе DataGrid

<Style TargetType="Button"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding ElementName=ScheduleDataGrid, Path=HasItems}" 
         Value="false"> 
      <Setter Property="Button.IsEnabled" Value="false"></Setter> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

и у меня есть две кнопки, которые добавляет/удаляет строку в DataGrid

<Button Name="BtnAddPoint" Content="Add" Width="70" Margin="10 0 10 0" Click="BtnAddSchedule_Click"></Button> 
<Button Name="BtnDeletePoint" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click"></Button> 

У меня есть два вопроса ,

В настоящее время вышеуказанный триггер отключает обе кнопки, когда я хочу, чтобы она отключила кнопку удаления. Установка целевого имени установщика на кнопку удаления не работает. Могу ли я сделать триггер целевой конкретной кнопкой?

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

ответ

2

Вы должны использовать Style с ключом, если вы хотите, чтобы назначить его на соответствующую кнопку:

<Style x:Key="DeleteButtonStyle" TargetType="{x:Type Button}"> 
    <Setter Property="Button.IsEnabled" Value="True" /> 
    <Style.Triggers>    
     <DataTrigger Binding="{Binding ElementName=ScheduleDataGrid, Path=SelectedItem}" Value="{x:Null}"> 
      <Setter Property="Button.IsEnabled" Value="False" /> 
     </DataTrigger>    
    </Style.Triggers> 
</Style> 

В BtnDeletePoint кнопку, Вы должны добавить стиль:

<Button Name="BtnAddPoint" Content="Add" Width="70" Margin="10 0 10 0" Click="BtnAddSchedule_Click"></Button> 
<Button Name="BtnDeletePoint" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click" Style="{StaticResource DeleteButtonStyle}"></Button> 

Вместо проверки HasItems и писать другой триггер чтобы проверить, выбрана ли сетка, вы можете записать триггер и проверить, является ли SelectedItem нулевым. SelectedItem свойство дает вам информацию, если сетка имеет элементы, и если пользователь выбрал один из них.

+0

Хороший вызов 'SelectedItem' -' {x: Null} 'trigger - не думал об этом. –

0

Если оба Button сек одни и те же Style и, следовательно, имеют один и тот же Trigger, то они оба будут отключены при тех же условиях (в данном случае, когда DataGrid имеет 0 элементов).

Чтобы отключить удаление Button при различных обстоятельствах, вам необходимо создать отдельный Style с другим Trigger и применить этот стиль к BtnDeletePoint. Поскольку я не вижу, что вы устанавливаете Style в объявлении кнопок, я бы предположил, что триггер принадлежит неявному стилю для Button, поэтому вам нужно назначить x:Key новому стилю, чтобы вы могли назначить его Ваша кнопка удаления:

<Style x:Key="DeleteButtonStyle" TargetType="Button"> 
    <!-- Setters --> 
    <!-- Triggers --> 
</Style> 

<Button Name="BtnDeletePoint" Style="{DynamicResource DeleteButtonStyle}" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click"/> 

что касается запуска, чтобы включить кнопку удаления, если только выбран один элемент, если вы не хотите использовать Count в SelectedItems собственности на DataGrid, то вам нужно будет использовать Converter для определения состояния выбора сетки - нет других DependencyProperties на DataGrid, что я знаю об этом, который предоставит вам информацию ион.

Кроме того, я не уверен в контексте без кода, но не считаю, что вы хотите DataTrigger в этом случае - вы должны быть в порядке со стандартом Trigger.

Смежные вопросы