none
WPF DataGridのセルが編集できない RRS feed

  • 質問


  • 以下のサンプルプログラムを実行していますが、バインディングされたセルをダブルクリックして編集したくてもできません。
    可能な限り IsReadOnly="False" を入れているのですが。
    解決方法を教えて下さい。よろしくお願い致します。



    (XAML)

    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="t1" Height="328" Width="613" BorderBrush="#FF3C8012" MaxHeight="479" MaxWidth="657">
       

    <Grid Margin="0" RenderTransformOrigin="0.501,0.48">
        <DataGrid x:Name="DataGrid1" AutoGenerateColumns="False" Margin="50,50,50,1" IsReadOnly="False" CanUserAddRows="True" CanUserDeleteRows="True">

            <DataGrid.Columns>
                <DataGridTemplateColumn Header="col1" Width="80" IsReadOnly="False" >
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding col1}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
        
    </Window>


    (VBソース)

    Imports System.Collections.ObjectModel

    Class MainWindow
        Public DGSource As New TestClassCollection()

        Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded

            Dim k0 As New TestClass
            DGSource.Clear()
            DGSource.Add(k0)
            Me.DataGrid1.ItemsSource = DGSource
        End Sub

    End Class


    Public Class TestClassCollection
        Inherits ObservableCollection(Of TestClass)

    End Class

    Public Class TestClass
        Public Property col1 As String

        Public Sub New()
            Dim r = New System.Random()
            Dim i1 As Integer = r.Next(9999)
            Me.col1 = String.Format("{0:0000}", i1)
        End Sub

    End Class


    2020年7月30日 1:08

回答

  • IsReadOnlyはデフォルトでFalseなので、あんまり明示的にFalseに設定することはありません。

    DataGridTemplateColumnで編集モードを利用可能にする場合、CellTemplateに加えて、編集モードに入った時に適用されるテンプレートCellEditingTemplateを設定する必要があります。


    • 編集済み Hongliang 2020年7月30日 1:36
    • 回答としてマーク huahi11112 2020年7月30日 2:05
    2020年7月30日 1:34

すべての返信

  • IsReadOnlyはデフォルトでFalseなので、あんまり明示的にFalseに設定することはありません。

    DataGridTemplateColumnで編集モードを利用可能にする場合、CellTemplateに加えて、編集モードに入った時に適用されるテンプレートCellEditingTemplateを設定する必要があります。


    • 編集済み Hongliang 2020年7月30日 1:36
    • 回答としてマーク huahi11112 2020年7月30日 2:05
    2020年7月30日 1:34
  •  これで解決できました。  TwoWayバインディングをやりたいと思っていたので良かったです。御回答まことにありがとうございました。

          <DataGridTemplateColumn Header="col1" Width="80" >
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding col1}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>

                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <TextBox Text="{Binding col1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>

                        
    2020年7月30日 2:07