Я недавно столкнулся, и ошибка выглядела так:
"невозможно привести объект типа pPP_2.Module
к типу System.Data.DataRowView
".
У меня есть Datagrid внутри моего кода, который имеет столбец кнопки. Выглядит так:
![enter image description here](https://i.stack.imgur.com/y9lgg.jpg)
Код Xaml позади:
<DataGrid x:Name="ModuleGrid" Grid.ColumnSpan="6" Grid.Column="1" Grid.RowSpan="4"
Grid.Row="1" AutoGenerateColumns="False" CanUserAddRows="False" Margin="10,10,10,13" GridLinesVisibility="None" AlternatingRowBackground="DarkGray">
<DataGrid.Columns>
<DataGridTextColumn Header="Module Name" Binding="{Binding Path=Name}"></DataGridTextColumn>
<DataGridTemplateColumn Header="Features">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding Features}" SelectedItem="{Binding Feature}" >
<ListView.DisplayMemberPath>
Name
</ListView.DisplayMemberPath>
</ListView>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Min:Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding Features}" SelectedItem="{Binding Feature}" >
<ListView.DisplayMemberPath>
MinValue
</ListView.DisplayMemberPath>
</ListView>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Max:Values">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding Features}" SelectedItem="{Binding Feature}" >
<ListView.DisplayMemberPath>
MaxValue
</ListView.DisplayMemberPath>
</ListView>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Change Per Minute Per Liter">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding Features}" SelectedItem="{Binding Feature}" >
<ListView.DisplayMemberPath>
ChangePerMinutePerLiter
</ListView.DisplayMemberPath>
</ListView>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="ButtonBase_OnClick" Background="LightSkyBlue" Margin="5">Pass</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Каждая строка заполнена пользовательским объектом типа Module, Код позади:
public class Module
{
public string Name { get; set; }
public string UniqueName { get; set; }
public Dictionary<Property, double> Properties { get; set; }
public List<Feature> Features { get; set; }
private Dictionary<Material, double> content = new Dictionary<Material, double>();
public Dictionary<Material, double> Content
{
get
{
return content;
}
set
{
content = value;
}
}
public double FillingCapacity { get; set; }
public double FillingAmount
{
get
{
double ret = 0;
foreach (double a in Content.Values)
{
ret += a;
}
return ret;
}
}
public override string ToString()
{
return Name;
}
}
public class Feature
{
public string Name { get; set; }
public string FeatureType { get; set; }
public Property UsedProperty { get; set; }
public double MinValue { get; set; }
public double MaxValue { get; set; }
public double ChangePerMinutePerLiter { get; set; }
}
)
А теперь код для события нажатия кнопки: (конечно, свойства объявлены в начале класса, но я покажу их здесь чтобы убедиться, что соединение ясно)
public String ChosenModule { get; set; }
public List<String> ChosenMods { get; set; }
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
try
{
---DataRowView dataRowView = (DataRowView)((Button)e.Source).DataContext;---
ChosenModule = dataRowView[0].ToString();
ChosenMods.Add(ChosenModule);
//This is the code which will show the button click row data. Thank you.
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
Итак, теперь моя проблема: метод ButtonBase_OnClick должен передать модуль выбранной строки в список строк ChosenMods
(я получаю имя модуля который объявлен String с datarowview [0]). Когда я нажимаю кнопку, я получаю исключение:
Unable to cast object of type "pPP_2.Module" to type "System.Data.DataRowView"
в строке, которую я пометил ---.
Я уже столько искал, но не смог найти решение для моей проблемы .. Благодаря рассмотрению моей проблемы,
Приветствие, IRezzet.