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
当我搜索关于这个问题,我得到了一些点,这可能会有帮助。
ObservableCollection
是缺乏关系(映射),所以这个问题发生。- 而不是
RowDetails
在网格中使用ChildTableDefinition
需要DataSet
但DataSet
不应该按照应用程序的要求使用。ObservableCollection
或List<>
是好的。
请将您的代码发布到NPISModels.LoadNPIS(SelectedNPISId),NPISCoverModels.LoadAllNPISCovers()等等。 – Steven
下面是如何将行添加到gridView的示例。 http://stackoverflow.com/questions/22834299/telerikradgrid-asp-add-new-record –