У меня есть собственная DataGrid, заполненная списком элементов, и я хочу изменить цвет строки элемента при двойном щелчке по ним.
Я пытаюсь сделать это, используя DataTriggers, привязанные к свойству boolв каждом пункте, но это не работает.Я вижу, что свойство bool фактически меняется на «false», но это изменение не отражается в пользовательском интерфейсе.
Код XAML:
<controlGrid:CustomDataGrid
Grid.Row="2"
Grid.Column="1"
MinHeight="100"
MaxHeight="650"
AutoGenerateColumns="False"
SelectionUnit="FullRow"
AlternationCount="2"
CanUserAddRows ="False"
HorizontalAlignment="Stretch"
VerticalScrollBarVisibility="Auto"
ItemsSource="{Binding Path=Items, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Selected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="False">
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding DoubleClickCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
C # ViewModel
private ICollectionView _items;
public ICollectionView Items
{
get { return _items; }
set
{
_cuentas = value;
NotifyPropertyChanged(nameof(Items));
}
}
private Item selectedItem;
public Item SelectedItem
{
get => selectedItem;
set
{
selectedItem = value;
SelectedItem.Selected = false;
NotifyPropertyChanged(nameof(SelectedItem));
}
{
private void DoubleClickInteraction()
{
foreach (var item in Items.Cast<Item>().Where(c => c.Id == SelectedItem.Id)
{
item.SeleccionadaPreviamente = false;
}
}
Custom DataGrid
public class CustomDataGrid : DataGrid
{
public static readonly DependencyProperty SelectedItemsListProperty = DependencyProperty.Register("SelectedItemsList", typeof(IList), typeof(CustomDataGrid), new PropertyMetadata(null));
public static readonly DependencyProperty PreSelectedItemsProperty = DependencyProperty.Register("PreSelectedItems", typeof(IList), typeof(CustomDataGrid), new PropertyMetadata(null));
public CustomDataGrid()
{
this.SelectionChanged += CustomDataGrid_SelectionChanged;
}
public void CustomDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
this.SelectedItemsList = this.SelectedItems;
}
Попытка изменить свойство непосредственно для свойства выбранного элемента, выполнить итерации по всему списку и изменить, когда идентификатор элемента совпадает с выбранным элементом, но все равно ничего: (Любойпредложения?