none
Datagrid CheckBoxColumn Zustand einer CheckBox Zelle abfragen RRS feed

  • Frage

  • Hallo zusammen,

    wie kann ich den Zustand (Checked/Unchecked) einer Datagrid CheckBox Zelle abfragen.

    Es git dazu viele Antworten aber nach meinem Kenntnisstand nichts Brauchbares.

    Das müsste doch eine einfache Abfrage sein ?

    mein XAML Code:

    <DataGridCheckBoxColumn Header="Able"  Binding=" {Binding Path=Abl}"  Width="40"  IsReadOnly="False">
                                <DataGridCheckBoxColumn.HeaderStyle>
                                    <Style TargetType="DataGridColumnHeader">
                                        <Setter Property="Background" Value="PeachPuff"/>
                                        <Setter Property="BorderBrush" Value="Black" />
                                        <Setter Property="BorderThickness" Value="1" />
                                        <Setter Property="HorizontalContentAlignment" Value="Center" />
                                        <Setter Property="FontWeight" Value="SemiBold" />
                                    </Style>
                                </DataGridCheckBoxColumn.HeaderStyle>
                             </DataGridCheckBoxColumn>

    Kann mir da jemand weiterhelfen

    Danke und viele Grüße

    Carl-Heinz

    Mittwoch, 15. November 2017 17:39

Antworten

  • Hi Carl-Heinz,
    eine einfache Lösung ist die Abfrage der Eigenschaft "Abl" in den Datenobjekten der gebundenen Liste, z.B. so:

    XAML:

    <Window x:Class="WpfApp1CS.Window23"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1CS"
            mc:Ignorable="d"
            Title="Window23" Height="300" Width="300">
      <Window.Resources>
        <local:Window23VM x:Key="vm"/>
      </Window.Resources>
        <Grid DataContext="{StaticResource vm}">
        <DataGrid ItemsSource="{Binding Daten}" AutoGenerateColumns="False">
          <DataGrid.Columns>
            <DataGridCheckBoxColumn Binding="{Binding Cbl, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
            <DataGridTextColumn Binding="{Binding Info}"/>
          </DataGrid.Columns>
        </DataGrid>
        </Grid>
    </Window>

    ViewModel dazu:

    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    using System.Windows;
    
    namespace WpfApp1CS
    {
    
      public class Window23VM
      {
        List<Window23Data> liste = new List<Window23Data>();
        public Window23VM()
        {
          for (int i = 1; i < 10; i++)
            liste.Add(new Window23Data());
        }
        public List<Window23Data> Daten
        {
          get
          {
            return liste;
          }
        }
      }
      public class Window23Data : INotifyPropertyChanged
      {
        private bool _cbl = false;
        public bool Cbl
        {
          get { return this._cbl; }
          set
          {
            this._cbl = value;
            Info = value ? "gesetzt" : "nicht gesetzt";
            OnPropertyChanged(nameof(Info));
          }
        }
        public string Info { get; set; } = "*";
        #region  OnPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged([CallerMemberName] string propName = "") =>
          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
        #endregion
      }
    }
    


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 15. November 2017 20:53

Alle Antworten

  • Hi Carl-Heinz,
    eine einfache Lösung ist die Abfrage der Eigenschaft "Abl" in den Datenobjekten der gebundenen Liste, z.B. so:

    XAML:

    <Window x:Class="WpfApp1CS.Window23"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1CS"
            mc:Ignorable="d"
            Title="Window23" Height="300" Width="300">
      <Window.Resources>
        <local:Window23VM x:Key="vm"/>
      </Window.Resources>
        <Grid DataContext="{StaticResource vm}">
        <DataGrid ItemsSource="{Binding Daten}" AutoGenerateColumns="False">
          <DataGrid.Columns>
            <DataGridCheckBoxColumn Binding="{Binding Cbl, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
            <DataGridTextColumn Binding="{Binding Info}"/>
          </DataGrid.Columns>
        </DataGrid>
        </Grid>
    </Window>

    ViewModel dazu:

    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    using System.Windows;
    
    namespace WpfApp1CS
    {
    
      public class Window23VM
      {
        List<Window23Data> liste = new List<Window23Data>();
        public Window23VM()
        {
          for (int i = 1; i < 10; i++)
            liste.Add(new Window23Data());
        }
        public List<Window23Data> Daten
        {
          get
          {
            return liste;
          }
        }
      }
      public class Window23Data : INotifyPropertyChanged
      {
        private bool _cbl = false;
        public bool Cbl
        {
          get { return this._cbl; }
          set
          {
            this._cbl = value;
            Info = value ? "gesetzt" : "nicht gesetzt";
            OnPropertyChanged(nameof(Info));
          }
        }
        public string Info { get; set; } = "*";
        #region  OnPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged([CallerMemberName] string propName = "") =>
          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
        #endregion
      }
    }
    


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 15. November 2017 20:53
  • Hi Peter,

    wie schon soft eine wirklich kompetente Hilfe!

    Herzlichen Dank und viele Grüße

    Carl-Heinz

    Donnerstag, 16. November 2017 18:08