Я пишу приложение, которое использует два элемента управления сеткой. Если пользователь выбирает строку в левом элементе управления сеткой, соответствующая строка в правом элементе управления сеткой должна быть выбрана из кода. Для обеих сеток я использую производный класс управления сеткой, который позволяет пользователю выбирать несколько строк одновременно. Код для выбора строки из кода работает, проблема, с которой я сталкиваюсь, заключается в том, что (очевидно) другие строки не выбраны должным образом , При выборе нескольких строк впоследствии в правом элементе управления сеткой (путем щелчка по строке, а затем по другой, используя shift + щелчок), выбирается намного больше строк, чем ожидалось.
public class CustomDataGrid : DataGrid
{
public CustomDataGrid()
{
SelectionChanged += CustomDataGrid_SelectionChanged;
}
void CustomDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
SelectedItemsList = SelectedItems;
}
#region SelectedItemsList
public IList SelectedItemsList
{
get { return (IList)GetValue(SelectedItemsListProperty); }
set { SetValue(SelectedItemsListProperty, value); }
}
public static readonly DependencyProperty SelectedItemsListProperty =
DependencyProperty.Register("SelectedItemsList", typeof(IList), typeof(CustomDataGrid), new PropertyMetadata(null));
#endregion
}
В файле xaml он используется как this:
<vm:CustomDataGrid ItemsSource="{Binding LeftGridItems}" SelectedItemsList="
{Binding SelectedLeftGridItems, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False" SelectionMode="Extended" IsReadOnly="True"
CanUserAddRows="False" Margin="7,0,7,7" Grid.Row="3" Grid.Column="0">
<DataGrid.Columns>
...
Код для выбора в левой сетке:
public IList SelectedLeftGridItems
{
get { return _selectedLeftGridItems; }
set
{
_selectedLeftGridItems = value;
// Select the copy on the right side, if available
if (_selectedLeftGridItems != null && _selectedLeftGridItems.Count > 0)
{
Element selected = ((Element)SelectedLeftGridItems[0]);
if (!string.IsNullOrEmpty(selected.CopyOf))
{
SelectedRightGridItems.Clear();
SelectedRightGridItems.Add(RightGridItems.FirstOrDefault(e => Path.GetFileName(e.Path) == Path.GetFileName(selected.CopyOf)));
OnPropertyChanged("SelectedRightGridItems");
}
}
OnPropertyChanged("SelectedLeftGridItems");
}
}
Как я могу убедиться, что выбранные элементы в правой сетке правильно администрируются?