2017-02-13 77 views
0
<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”后,当我操纵data.Ended与错误说明无法强制MS.Internal.NamedObject。无法投射MS.Internal.NamedObject

试过下面的方法,它工作。

if (obj.GetType().ToString() != "MS.Internal.NamedObject") 
    return this.Equals(obj as RecipeBase); 
else 
    return false; 

任何人都可以有任何其他的方法吗?

回答

0

任何人都可以有任何其他的方法吗?

您应该使用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))