/ / WPF-Konverter in DataGridCell - c #, wpf, xaml

WPF-Konverter in DataGridCell - c #, wpf, xaml

Ich versuche, einen Konverter zu erstellen, der zeigt, wenn etwas Wert hat. Anderer als "Keiner", schreibe "X" in die Zelle. Ich habe also einen einfachen Elementstil erstellt:

<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding Value, Converter={StaticResource SetBitConverter}}"/>
</Style>
</DataGridTextColumn.ElementStyle>

Und Konverter ist auch einfach

public class SetBitConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var input = value as string;

switch (input)
{
case "None":
return "OK";
default:
return "X";
}
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}

Das Problem ist nun, dass der Wert beim Konvertieren nicht in den Konverter eingegeben wird. Wenn ich jedoch die Eigenschaft von Text in Hintergrund ändern, wird der Konverter problemlos eingegeben.

Antworten:

3 für die Antwort № 1

Der von einem Style angewendete Wert hat immer eine niedrigere Priorität als der Wert, der direkt oder in Ihrem Fall von einer Bindung festgelegt wurde. Wenn Sie einen Konverter hinzufügen möchten, fügen Sie ihn dem hinzu Binding Eigentum der DataGridTextColumn oder benutze a DataGridTemplateColumn stattdessen.

Z.B.:

<DataGridTextColumn Binding="{Binding Value, Converter={StaticResource SetBitConverter}}"/>

Hier ist ein Vergleich der automatisch generierten Standardspalte und der von oben:

Vergleich


Warum gibt es Vorrang für Abhängigkeitseigenschaften?
Normalerweise möchten Sie nicht immer Stileanwenden und sogar einen lokal festgelegten Wert eines einzelnen Elements verschleiern (ansonsten wäre es sehr schwierig, Stile oder Elemente im Allgemeinen zu verwenden). Daher arbeiten die Werte, die aus Stilen stammen, mit einem niedrigeren Präzedenzfall als ein lokal festgelegter Wert.

Technischer Hintergrund zur Wertigkeit

  1. Eigentum System Zwang
  2. Aktive Animationen oder Animationen mit Hold-Verhalten
  3. Lokaler Wert
  4. TemplatedParent-Vorlageneigenschaften
  5. Impliziter Stil
  6. Style löst aus
  7. Template-Trigger
  8. Style Setter
  9. Standardstil (Design)
  10. Erbe
  11. Standardwert aus Metadaten der Abhängigkeitseigenschaft