Вот код код Жгут Я использовал, чтобы увидеть, что ваш код работает отлично. Я добавляю комментарии вокруг вашего 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.
Я просто пробовал ваш подход, и триггер работает нормально, возможно, вы испортили имя своей кнопки. –
@Slowbrochacho как вы можете это сделать? Не существует свойства 'IsPressed' в Button – StepUp
@StepUp, кнопка наследует его от кнопочной базы, https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.ispressed%28v= vs.110% 29.aspx –