none
DataGrid IsReadOnly Binding RRS feed

  • Frage

  • Hallo,

    ich habe eine Person-Klasse die verschiedene Eigenschaften hat - bspw.:

    - Name : String

    - IsWritable : Boolean

    Die einzelnen Personen werden in eine Auflistung gespeichert und die Auflistung als Quelle für ein DataGrid benutzt

    Jede Person stellt somit ein Datenzeile dar und die Eigenschaften sind die Zellen.

    Nun erstelle ich meine Spalten ala DataGridTextColumn und setzt die Binding-Eigenschaft auf bspw. {Binding Name}. Soweit so gut.

    Nun möchte ich die IsReadOnly-Eigenschaft der Zelle(Person.Name-Eigenschaft) an die Person.IsWritable binden. Etwa so:

    <DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="{Binding IsWritable}"/>

    Funktioniert aber nicht:

    System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=IsWritable; DataItem=null; target element is 'DataGridTextBoxColumn' (HashCode=34418569); target property is 'IsReadOnly' (type 'Boolean')

    Danke für jede Hilfe

    Gruß Scotty

      

    Mittwoch, 6. Mai 2015 10:31

Antworten

Alle Antworten

  • Hallo Karsten,

    die IsReadOnly-Eigenschaft der Spalte gilt wirklich für die gesamte Spalte. Ich denke daher, das du nicht drum herum kommen wirst eine eigene Spalte zu erstellen. Am einfachsten ist wahrscheinlich so etwas wie das folgende:

    <DataGridTemplateColumn Header="Name">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <TextBox Text="{Binding Name}" IsReadOnly="{Binding IsReadOnly}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
    </DataGridTemplateColumn>


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Mittwoch, 6. Mai 2015 15:26
    Moderator
  • Hallo Karsten,

    Ich gehe davon aus, dass Toms Antwort Dir weitergeholfen hat. Solltest Du noch Rückfragen dazu haben, gib bitte Bescheid.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 20. Mai 2015 07:52
    Moderator
  • Hallo Tom,

    geht auch so:

    <DataGridTextColumn Header="Name" Binding="{Binding Name}">
      <DataGridTextColumn.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
          <Setter Property="IsReadOnly" Value="False"/>
          <Style.Triggers>
            <MultiDataTrigger>
              <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding Path=IsWritable}" Value="False"/>
              </MultiDataTrigger.Conditions>
              <Setter Property="IsReadOnly" Value="True"/>
            </MultiDataTrigger>
          </Style.Triggers>
        </Style>
      </DataGridTextColumn.CellStyle>
    </DataGridTextColumn>

    Gruß Scotty

    Dienstag, 26. Mai 2015 12:58