2016-06-01 2 views
0

Я знаю, что это можно сделать, работая с ICommand, но поскольку это единственное место в моем проекте, где это необходимо, я спрашиваю себя, может быть, лучшее решение, чем реализация RelayCommand и ICommand и дополнительный метод в моем классе только для свойств?WPF: Как установить bool в true из DataTemplate для кнопки?

Может быть, мой сценарий может помочь здесь: У меня есть ListView, который связан со списком свойств (это специальный класс, который я сделал для их отображения). У меня есть кнопка в каждой строке записей, что я хочу установить для свойства IsToDelete значение true.

Если значение «IsToDelete» истинно, все элементы управления, которые я показываю в своем ListView, рушится.

Вся логика до этого момента в DataTemplates, один для моей кнопки выглядит следующим образом:

<DataTemplate x:Key="DeleteButtonTemplate"> 
    <Button Name="bt_Delete" 
    Command="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=ItemSource.DeleteClicked}"> 
    <Image Height="16" Width="16" Source="Images\RecycleBin\VSO_RecycleBin_16x.png"/> 
    <Button.Style> 
     <Style TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsToDelete}" Value="True"> 
      <Setter Property="Visibility" Value="Collapsed"/> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </Button.Style> 
    </Button> 
</DataTemplate> 

Примечание команда в этом DataTemplate в настоящее время не работает, как задумано, поэтому я даже получил на вопрос;)

в оптимальном случае я бы просто сделать что-то вроде:

<Setter Property="{Binding IsToDelete}" Value="True"/> 

Итак, есть ли способ, чтобы решить, как это или, по крайней мере, в менее сложный путь, чем ICommand с RelayCommand?

+0

Вы хотите установить 'Видимость'' Button' 'Collapsed' после нажатия кнопки' Button'? – StepUp

+0

Как назначить datacontext на страницу/кнопку, и где эта команда определена как свойство IsToDelete? –

+0

@StepUp да, это именно то, что я хочу сделать, но поскольку это не единственный элемент управления для изменения, мне нужно установить логическое значение IsToDelete в true. – ExNought

ответ

1

Почему бы не использовать ToggleButton и свяжите IsChecked недвижимость от IsToDelete property of the viewModel?

упрощенный пример ItemsControl

<ItemsControl> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <ToggleButton Content="X" IsChecked="{Binding Path=IsToDelete}"/> 
       <Border Width="100"         
         Background="MediumPurple" 
         Margin="5"> 

        <Border.Style> 
         <Style TargetType="Border"> 
          <Setter Property="Visibility" Value="Visible"/> 
          <Style.Triggers>           
           <DataTrigger Binding="{Binding Path=IsToDelete}" Value="True"> 
            <Setter Property="Visibility" Value="Collapsed"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Border.Style> 

       </Border> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate>    
</ItemsControl> 
+0

... Иногда мне так чертовски сфокусировано на одной проблеме, что я пропустил легкий путь ^^ Я все еще хотел бы знать, ЕСЛИ это было возможно с помощью просто кнопка. Спасибо в любом случае – ExNought

0

Вы можете использовать Click EventHandler кнопки. Тогда вам не нужны никакие команды.

private void bt_Delete_Click(object sender, RoutedEventArgs e) 
{ 
    var btn = sender as Button; 
    YourClass dc = btn.DataContext as YourClass; 
    dc.IsToDelete = true; 
} 

Мне не нравится это решение, но я думаю, это сработает.

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

  • Нет связанных вопросов^_^