2014-04-28 44 views
0

我工作的添加功能WPF radgridview(childgrid),编辑,删除在Gridview。现在我有一些4 Collections这是绑定到Gridview及其孩子。所有这些收藏品都是ObservableCollection。该绑定做得很好,但是当我尝试在主网格中添加一个新的行时,该网格中还提供了子网格细节,集合的值将在新行中共享。绑定集合到使用MVVM

// XAML

<telerik:RadGridView x:Name="grd1" AutoGenerateColumns="False" Grid.Row="1" IsBusy="{Binding IsBusy, Mode=TwoWay, Source={StaticResource NPISViewModel}}" IsSynchronizedWithCurrentItem="True" 
           SelectedItem="{Binding SelectedNPIS, Mode=TwoWay}" RowDetailsVisibilityMode="{Binding VisibleMode, Mode=TwoWay, Source={StaticResource NPISViewModel}}" GridLinesVisibility="Both" 
           ItemsSource="{Binding NPISList, Mode=TwoWay, Source={StaticResource NPISViewModel}}" GroupRenderMode="Flat" ShowGroupPanel="False" >     
       <telerik:RadGridView.Columns> 
        <telerik:GridViewToggleRowDetailsColumn />  
        <telerik:GridViewDataColumn Header="Id" DataMemberBinding="{Binding Id}"/> 
        <telerik:GridViewImageColumn Header="Sketch" DataMemberBinding="{Binding Sketch}" Width="80*" IsFilterable="False" /> 
        <telerik:GridViewDataColumn Header="RD #" DataMemberBinding="{Binding RDNumber}" Width="80*" /> 

       </telerik:RadGridView.Columns>     
        <telerik:RadGridView.RowDetailsTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <telerik:RadGridView x:Name="grdChild1" ItemsSource="{Binding NPISItemsList, Mode=TwoWay, Source={StaticResource NPISViewModel}}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedNPISItem, Mode=TwoWay, Source={StaticResource NPISViewModel}}" 
           HorizontalAlignment="Stretch" 
           Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}, Path=ActualWidth, Converter={StaticResource PercentageConverter}, ConverterParameter=0.98}" 
           GridLinesVisibility="Both"> 
           <telerik:RadGridView.Columns> 
            <telerik:GridViewDataColumn Header="Description" DataMemberBinding="{Binding Name}" Width="120*"/> 
            <telerik:GridViewDataColumn Header="Unit #" DataMemberBinding="{Binding Number}" Width="80*" /> 
            <telerik:GridViewDataColumn Header="WidthIn" DataMemberBinding="{Binding WidthInches}" Width="40*" /> 

           </telerik:RadGridView.Columns> 
          </telerik:RadGridView> 
<telerik:RadGridView x:Name="grdChild2" ItemsSource="{Binding NPISCoversList, Mode=TwoWay, Source={StaticResource NPISViewModel}}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedNPISCover, Mode=TwoWay, Source={StaticResource NPISViewModel}}" 
           HorizontalAlignment="Stretch" Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}, Path=ActualWidth, Converter={StaticResource PercentageConverter}, ConverterParameter=0.98}" GridLinesVisibility="Both"> 
           <telerik:RadGridView.Columns> 
            <telerik:GridViewDataColumn Header="CoverName" DataMemberBinding="{Binding Name, Mode=TwoWay}" Width="120*" /> 
            <telerik:GridViewDataColumn Header="ColorId" DataMemberBinding="{Binding ColorId, Mode=TwoWay}" Width="60*" /> 
            <telerik:GridViewDataColumn Header="CleanCodeId" DataMemberBinding="{Binding CleaningInformationCode, Mode=TwoWay}" Width="60*" /> 


          <telerik:RadGridView x:Name="grdChild3" ItemsSource="{Binding NPISNotesList, Mode=TwoWay, Source={StaticResource NPISViewModel}}" AutoGenerateColumns="False" SelectedItem="{Binding SelectedNPISNote, Mode=TwoWay, Source={StaticResource NPISViewModel}}" 
           HorizontalAlignment="Stretch" GridLinesVisibility="Both" Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}, Path=ActualWidth, Converter={StaticResource PercentageConverter}, ConverterParameter=0.98}" > 
           <telerik:RadGridView.Columns> 
            <telerik:GridViewDataColumn Header="Note" DataMemberBinding="{Binding Note, Mode=TwoWay}" Width="120*"/> 

           </telerik:RadGridView.Columns> 
          </telerik:RadGridView> 
         </StackPanel> 
        </DataTemplate> 
       </telerik:RadGridView.RowDetailsTemplate> 
      </telerik:RadGridView> 

//视图模型

 /// <summary> 
     /// Get or set npis list. 
     /// </summary> 
     public ObservableCollection<NPISBO> NPISList 
     { 
      get { return m_NPISList; } 
      set 
      { 
       if (m_NPISList != value) 
       { 
        m_NPISList = value; 
        RaisePropertyChanged(() => NPISList); 
       } 
      } 
     } 

     /// <summary> 
     /// Get or set npis items list. 
     /// </summary> 
     public ObservableCollection<NPISItemBO> NPISItemsList 
     { 
      get { return m_NpisItemsList; } 
      set 
      { 
       if (m_NpisItemsList != value) 
       { 
        m_NpisItemsList = value; 
        RaisePropertyChanged(() => NPISItemsList); 
       } 
      } 

     } 

     /// <summary> 
     /// Get or set npis covers list. 
     /// </summary> 
     public ObservableCollection<NPISCoverBO> NPISCoversList 
     { 
      get { return m_NpisCoversList; } 
      set 
      { 
       if (m_NpisCoversList != value) 
       { 
        m_NpisCoversList = value; 
        RaisePropertyChanged(() => NPISCoversList); 
       } 
      } 
     } 

     /// <summary> 
     /// Get or set npis notes list. 
     /// </summary> 
     public ObservableCollection<NPISNoteBO> NPISNotesList 
     { 
      get { return m_NpisNotesList; } 
      set 
      { 
       if (m_NpisNotesList != value) 
       { 
        m_NpisNotesList = value; 
        RaisePropertyChanged(() => NPISNotesList); 
       } 
      } 
     } 


     NPISList = new ObservableCollection<NPISBO>(NPISModels.LoadNPIS(SelectedNPISId)); 
       NPISCoversList = new ObservableCollection<NPISCoverBO>(NPISCoverModels.LoadAllNPISCovers()); 
       NPISItemsList = new ObservableCollection<NPISItemBO>(NPISItemModels.LoadAllNPISItems()); 
       NPISNotesList = new ObservableCollection<NPISNoteBO>(NPISNoteModels.LoadAllNPISNotes()); 

现在我只需要在新行被创建。我错在哪里?

注: Telerik的版本2013.1.403.45

当我搜索关于这个问题,我得到了一些点,这可能会有帮助。

  1. ObservableCollection是缺乏关系(映射),所以这个问题发生。
  2. 而不是RowDetails在网格中使用ChildTableDefinition需要DataSetDataSet不应该按照应用程序的要求使用。 ObservableCollectionList<>是好的。
+0

请将您的代码发布到NPISModels.LoadNPIS(SelectedNPISId),NPISCoverModels.LoadAllNPISCovers()等等。 – Steven

+0

下面是如何将行添加到gridView的示例。 http://stackoverflow.com/questions/22834299/telerikradgrid-asp-add-new-record –

回答

0

我怀疑你的SelectedNPISItem setter没有正确填充子集合。 但是,老实说,我会重构代码,以便NPISItem具有集合属性。您可以将子网格绑定到项目的属性,而不是全局“拥有全部”集合。它应该是这样的:

​​

添加一个新行NPISItemsList之前填充其以信息子集合相关的新数据,并结合将做休息。