ItemsSource가 ObservableCollection이 아닌 경우 DataGridView를 사용하여 셀을 편집 할 수 없다는 것을 알고 꽤 오랜 시간이 걸렸습니다. 그 가정에 내가 맞습니까?ObservableCollection을 ItemsSource로 사용하지 않고 DataGridViewCell을 편집하십시오.
다른 DataGridView의 SelectedItem 속성이 ItemsSource 인 DataGridView가 있습니다. 불행히도 그 속성은 ObservalbeCollection이 될 수 없거나 그 속성에서 파생 될 수 없습니다.
내 구체적인 문제는 그 ItemsSource가 명시 적으로 OberservableCollection이 아닌 경우 DataGridView에서 셀을 편집 할 수 없다는 것입니다. 나는 그 이유 때문에 INotifyCollectionChanged Interface가 존재하기를 바랐다. 어떤 제안? 사전에
덕분에
존
이 ItemsSource
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
}
역할을 제의 ViewModel 코드입니다 그리고 이것은 데이터 그리드
<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>