2016-02-12 2 views
0

Я хотел бы видеть SelectedIndex свойство dataGrid, когда я нажимаю кнопку того же вида. Я пытаюсь этот код:Как установить selectedIndex на -1, когда я нажимаю кнопку?

<DataGrid.Style> 
    <Style TargetType="DataGrid"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=myButton, Path=IsPressed}" Value="True"> 
       <Setter Property="SelectedIndex" Value="-1"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.Style> 

Butn я нажимаю на кнопку selectedIndex не обновлять. Я думаю, что dataTrigger, как установлен в стиле, он не уволен, но на самом деле я не уверен.

Как я могу установить свойство selectedIndex, когда я нажимаю кнопку?

Спасибо.

+0

Я просто пробовал ваш подход, и триггер работает нормально, возможно, вы испортили имя своей кнопки. –

+0

@Slowbrochacho как вы можете это сделать? Не существует свойства 'IsPressed' в Button – StepUp

+2

@StepUp, кнопка наследует его от кнопочной базы, https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.ispressed%28v= vs.110% 29.aspx –

ответ

1

Вот код код Жгут Я использовал, чтобы увидеть, что ваш код работает отлично. Я добавляю комментарии вокруг вашего xaml, чтобы вы могли сопоставить его с вашим собственным кодом. Код - это просто окно с базовыми DataGrid, Button и TextBlock, привязанными к SelectedIndex вашего DataGrid. Вы можете видеть, что когда вы нажимаете кнопку, текст TextBlock будет установлен на -1, что вы устанавливаете как значение вашего SelectedIndex в вашем DataTrigger.

Xaml:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns:local="clr-namespace:WpfApplication1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <local:IntToStringConverter x:Key="intoStringConverter"/> 
    </Window.Resources> 
    <StackPanel> 
     <DataGrid Name="dgUsers"> 
     <!-- Copy and paste of your code --> 
      <DataGrid.Style> 
       <Style TargetType="DataGrid"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=myButton, Path=IsPressed}" Value="True"> 
          <Setter Property="SelectedIndex" Value="-1"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </DataGrid.Style> 
     <!---End of copy paste--> 
     </DataGrid> 
     <Button Name="myButton">Reset Index</Button> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="SelectedIndex: "/> 
      <TextBlock Text="{Binding ElementName=dgUsers, Path=SelectedIndex, Converter={StaticResource intoStringConverter}}"/> 
     </StackPanel> 
    </StackPanel> 
</Window> 

код позади:

using System; 
using System.Windows; 
using System.Windows.Data; 
using System.Globalization; 
using System.Collections.Generic; 

namespace WpfApplication1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      List<Test> testList = new List<Test>(); 
      testList.Add(new Test() { ID = 1, Name = "first" }); 
      testList.Add(new Test() { ID = 2, Name = "second" }); 
      testList.Add(new Test() { ID = 3, Name = "third" }); 

      dgUsers.ItemsSource = testList; 
     } 
    } 

    public class Test 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
    } 

    [ValueConversion(typeof(int), typeof(string))] 
    public class IntToStringConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (value == null) 
       return "NULL"; 
      return value.ToString(); 
     } 
     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

В мой комментарий, где я сказал, что кнопка наследует IsPressed от ButtonBase. Я имел в виду, что вы можете получить доступ к свойству IsPressed через экземпляр кнопки, поскольку Button является подклассом ButtonBase, который реализует IsPressed.

+0

Большое вам спасибо. –

1

IsPressed свойство только имеют get не set, а иногда это может вызвать проблемы в триггерах. (как и другие свойства этого типа), однако здесь она работает отлично.

B ут, если вы хотите другой подход попробуйте использовать ниже:

<DataGrid ItemsSource="{Binding BadFoldersHistory}" Name="list" Height="200" SelectedIndex="{Binding ElementName=myButton,Path=Tag}" > 

    </DataGrid> 

    <Button Content="click" Height="100" Width="200" Name="myButton"> 
     <Button.Style> 
      <Style TargetType="Button">     
        <Style.Triggers> 
         <EventTrigger RoutedEvent="Button.Click"> 
          <BeginStoryboard> 
            <Storyboard>           
             <Int32Animation Storyboard.TargetProperty="Tag" To="-1"/> 
            </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger>      
        </Style.Triggers> 
       </Style> 
     </Button.Style> 
    </Button> 
Смежные вопросы