Я довольно новичок в WPF и MVVM и новичок в целом, поэтому заблаговременно за ваше терпение.WPF DataGrid дает ArgumentOutOfRangeException при нажатии
Я использую пользовательский класс в своей модели, и у меня есть ObservableCollection этого пользовательского объекта в моей модели viewmodel. В конструкторе класса я добавляю объект в коллекцию при его создании. На мой взгляд, я использую DataGrid, привязанный к коллекции, чтобы перечислять все активные экземпляры класса. Я пытаюсь реализовать drag-and-drop из DataGrid на значок корзины, который позволит пользователю избавиться от ненужных экземпляров класса.
Проблема заключается в том, что при щелчке что-либо в DataGrid программа сразу же вылетает из-за исключения ArgumentOutOfRange - («Данный DisplayIndex находится за пределами допустимого диапазона. DisplayIndex должен быть больше или равен 0 и меньше, чем Columns.Count . "Фактическое значение равно 0"). DisplayIndex, похоже, относится к столбцу DataGrid, поэтому это исключение, вероятно, связано с тем, что я не показываю никаких столбцов в традиционном смысле - в моем DataGrid, AutoGenerateColumns установлено значение False, и я показываю все, что мне нужно для отображения, используя RowDetailsTemplate. (Причина этого в том, что область, где я показываю DataGrid, узкая, поэтому мне нужна вложенная, специфичная для элемента сетка, чтобы правильно представлять элемент.) DataGrid отображает и синхронизирует с коллекцией, но, очевидно, имеет некоторые проблемы , Я прочитал десятки ссылок на авариях DataGrid и не нашел ничего, что связано с этим исключением.
Мое желание - передать пользовательский объект, представленный элементом DataGrid, целевой, когда я перетаскиваю его. Мне все равно, какой «столбец» они нажали или что-то еще - мне просто нужен способ передать либо ссылку на объект, либо SelectedIndex (индекс элементов в коллекции) методу в viewmodel.
Заранее благодарю за помощь! Нарушитель бит кода (XAML), кажется:
<ScrollViewer DockPanel.Dock="Bottom" Margin="2" Width="180" ScrollViewer.VerticalScrollBarVisibility="Auto">
<DataGrid ItemsSource="{Binding Path=myCollection, Mode=OneWay}" AutoGenerateColumns="False" RowDetailsVisibilityMode="Visible" HeadersVisibility="None">
<DataGrid.RowDetailsTemplate>
<DataTemplate DataType="model:myClass">
<Border CornerRadius="10" Background="AliceBlue">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding MyString1}" FontSize="21" VerticalAlignment="Bottom" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding MyCustomProperty, Converter={StaticResource MyIValueConverter}}" VerticalAlignment="Bottom" />
<TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding MyString2}" TextWrapping="Wrap" />
<Image Source="/Resources/image1.png" Grid.Column="2" Grid.Row="0">
<Image.DataContext>
<Properties:Resources/>
</Image.DataContext>
</Image>
<Image Source="/Resources/image2.png" Grid.Column="2" Grid.Row="1">
<Image.DataContext>
<Properties:Resources/>
</Image.DataContext>
</Image>
</Grid>
</Border>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
</ScrollViewer>