<DataGrid x:Name="DisplayRecipeGrid" AutoGenerateColumns="False" CanUserAddRows="false" ItemsSource="{Binding ModuleRecipeCatalog}" VerticalContentAlignment="Center" IsReadOnly="True">
<!---->
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<EventSetter Event="MouseDoubleClick" Handler="EditRecipe_Executed"></EventSetter>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGrid x:Name="DisplayRecipeGrid" AutoGenerateColumns="False" CanUserAddRows="false" ItemsSource="{Binding ModuleRecipeCatalog}" VerticalContentAlignment="Center" IsReadOnly="True"><!---->
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<EventSetter Event="MouseDoubleClick" Handler="EditRecipe_Executed"></EventSetter>
</Style>
</DataGrid.RowStyle>
</DataGrid.Columns>
</DataGrid>
使用CanUserAddRows =“false”后,当我操作数据时出现错误,表明无法强制转换MS.Internal.NamedObject。
尝试以下方法,它有效。
if (obj.GetType().ToString() != "MS.Internal.NamedObject")
return this.Equals(obj as RecipeBase);
else
return false;
任何人都可以有其他方法吗?
答案 0 :(得分:2)
任何人都可以有其他方法吗?
您应该使用as
运算符并检查结果以确定转换是否成功:
RecipeBase x = obj as RecipeBase;
if(x == null)
return false;
return Equals(x);
然后不需要将对象类型的字符串表示与“MS.Internal.NamedObject”进行比较。
如果您仍然出于某种奇怪的原因想要这样做,那么与System.Windows.Data.CollectionView.NewItemPlaceholder
常数进行比较可能更好:
if(!(obj is System.Windows.Data.CollectionView.NewItemPlaceholder))