none
WPF DataGrid erkennt dg_BeginningEdit() nicht - Template RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte mittels dg.BeginningEdit() feststellen, ob bestimmte Zellen eines DataGrids bearbeitet werden.

    Das klappt mit:

     <Style x:Key="Zelle" TargetType="{x:Type DataGridCell}" >
       <Setter Property="Template">
         <Setter.Value>
           <ControlTemplate TargetType="{x:Type DataGridCell}">
             <Grid Background="{TemplateBinding Background}">
               <ContentPresenter/>
             </Grid>
           </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>

    Sobald ich Templates verwende klappt es leider nicht mehr.

    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridCell}">
          <TextBlock/>
        </ControlTemplate>
      </Setter.Value>
    </Setter>

    Kommt dg.BeginningEdit() mit Templates nicht zurecht?

    Gibt es eine einfache Lösung?

    Dirk

    PlanAbsatzTabelle_BeginningEdit(

    Sonntag, 12. Januar 2014 14:20

Antworten

  • Hallo,
    ich kann dein Problem nicht reproduzieren. Ich habe das DataGrid wie folgt erstellt:

    <DataGrid Margin="0,100,0,0" Name="dg" AutoGenerateColumns="False" BeginningEdit="dg_BeginningEdit">
        <DataGrid.Resources>
            <Style x:Key="Zelle" TargetType="{x:Type DataGridCell}" >
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridCell}">
                            <TextBlock/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Id}"/>
            <DataGridTextColumn Binding="{Binding Name}"/>
        </DataGrid.Columns>
    </DataGrid>

    Im Codebehind wies ich die Daten wie folgt zu:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            dg.ItemsSource = new[] { new Data() { Name = "a", Id = 1 }, new Data() { Name = "b", Id = 2 }, new Data() { Name = "c", Id = 3 } };
        }
    
        void dg_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
        {
            Debug.WriteLine("dg_BeginningEdit");
        }
    }
    
    public struct Data
    {
        public string Name { get; set; }
        public int Id { get; set; }
    }

    Egal, ob ich kein Template oder eines deiner Beiden einsetzte, es erschien immer die Debug-Ausgabe.

    Hast du irgend etwas anders gemacht, als ich?

    PS: Es speilt keine Rolle ob die Spalten explizit definiert wurden oder vom DataGrid erstellt werden.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Dirk2006 Dienstag, 14. Januar 2014 11:20
    Sonntag, 12. Januar 2014 15:31
    Moderator

Alle Antworten

  • Hallo,
    ich kann dein Problem nicht reproduzieren. Ich habe das DataGrid wie folgt erstellt:

    <DataGrid Margin="0,100,0,0" Name="dg" AutoGenerateColumns="False" BeginningEdit="dg_BeginningEdit">
        <DataGrid.Resources>
            <Style x:Key="Zelle" TargetType="{x:Type DataGridCell}" >
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridCell}">
                            <TextBlock/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.Resources>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Id}"/>
            <DataGridTextColumn Binding="{Binding Name}"/>
        </DataGrid.Columns>
    </DataGrid>

    Im Codebehind wies ich die Daten wie folgt zu:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            dg.ItemsSource = new[] { new Data() { Name = "a", Id = 1 }, new Data() { Name = "b", Id = 2 }, new Data() { Name = "c", Id = 3 } };
        }
    
        void dg_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
        {
            Debug.WriteLine("dg_BeginningEdit");
        }
    }
    
    public struct Data
    {
        public string Name { get; set; }
        public int Id { get; set; }
    }

    Egal, ob ich kein Template oder eines deiner Beiden einsetzte, es erschien immer die Debug-Ausgabe.

    Hast du irgend etwas anders gemacht, als ich?

    PS: Es speilt keine Rolle ob die Spalten explizit definiert wurden oder vom DataGrid erstellt werden.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Dirk2006 Dienstag, 14. Januar 2014 11:20
    Sonntag, 12. Januar 2014 15:31
    Moderator
  • Danke.
    Dienstag, 14. Januar 2014 11:21