Есть ли способ выделить элементы в пользовательской сетке данных? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть собственная 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;
    }

Попытка изменить свойство непосредственно для свойства выбранного элемента, выполнить итерации по всему списку и изменить, когда идентификатор элемента совпадает с выбранным элементом, но все равно ничего: (Любойпредложения?

...