编辑 DataGridViewCell,而不将 ObservableCollection 作为 ItemsSource
本文关键字:ObservableCollection 作为 ItemsSource DataGridViewCell 编辑 | 更新日期: 2023-09-27 18:32:16
我
花了相当长的时间才弄清楚,如果 ItemsSource 不是 ObservableCollection,DataGridView 将不允许编辑单元格。我的假设是对的吗?
我有一个 DataGridView,具有另一个 DataGridView 的 SelectedItem 作为 ItemsSource 的属性。不幸的是,该属性不能是观察者收藏或从中派生。
所以我在这里的具体问题是,如果 DataGridView 的 ItemsSource 不是明确的 OberservableCollection,则不允许我编辑单元格。我希望,INotifyCollectionChanged Interface就是出于这个原因而存在的。有什么建议吗?
提前致谢
John
这是我的视图模型的代码,它用作项目源
public class NdfCollection : NdfValueWrapper, IList<NdfValueWrapper>, INotifyCollectionChanged
{
private readonly ObservableCollection<NdfValueWrapper> _innerList = new ObservableCollection<NdfValueWrapper>();
public NdfCollection(long offset)
: base(NdfType.List, offset)
{
}
public NdfCollection(IEnumerable<NdfValueWrapper> list, long offset)
: this(offset)
{
if (list != null)
foreach (NdfValueWrapper wrapper in list)
InnerList.Add(wrapper);
}
public ObservableCollection<NdfValueWrapper> InnerList
{
get { return _innerList; }
}
// Implementation of the Interfaces not pasted in here
}
这是我用于数据网格的 XAML 代码
<DataGrid Grid.Row="1" MaxHeight="400" ItemsSource="{Binding Path=SelectedItem.Value, ElementName=propGrid}"
IsSynchronizedWithCurrentItem="True"
CanUserResizeRows="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
AutoGenerateColumns="False"
SelectionMode="Single"
SelectionUnit="CellOrRowHeader" IsReadOnly="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Type}" Header="Type" IsReadOnly="True" Width="*" />
<!--<DataGridTextColumn Binding="{Binding}" Header="Biniary Value" IsReadOnly="False" Width="*" />-->
<DataGridTemplateColumn Header="Value" IsReadOnly="False" Width="*" CellEditingTemplateSelector="{DynamicResource editingControlTemplateSelector}" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
解决方案是将 IList 显式实现到自定义集合。工程!
包装的可观察集合在绑定到 WPF 数据网格时引发'EditItem' is not allowed for this view