Я пытаюсь применить условное форматирование к WPF DataGrid. Требование заключается в следующем. Для любой ячейки в сетке, если содержимое является целым числом, формат отображения должен быть ноль десятичных знаков. Если содержимое имеет десятичные разряды, отобразите их по умолчанию, определенному в строковом формате.
Кто-нибудь знает, как мне добиться такого условного форматирования? Я написал конвертер, который может проверять наличие десятичных дробей, но я не смог понять, как я смогу применить это в своем XAML либо к стилю ячейки, либо к моему текстовому столбцу.
Стиль ячейки - это стиль, который я хотел бы определить
<Style x:Key="MyCellStyle" TargetType="DataGridCell">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
Столбец сетки - я бы применил стиль, примененный к этому столбцу
<DataGridTextColumn x:Key="ColumnName"
Header="ColumnName"
SortMemberPath="MyColumnSort"
Binding="{Binding myColBinding, StringFormat={}{0:N2}}"
IsReadOnly="True"
Width="40" />
Конвертер - я бы использовал этот конвертер, чтобы определить, применяется ли этот стиль.
public class NoDecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int converted;
int.TryParse(value.ToString(), out converted);
value.ToString();
return int.TryParse(value.ToString(), out converted);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Я попытался сделать это, добавив источник данных в стиль своей ячейки, как показано ниже, но получил сообщение об ошибке «Не удается найти свойство стиля« StringFormat »для типа« System.Windows.Controls.DataGridCell ».»
<Style x:Key="MyCellStyle" TargetType="DataGridCell">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Style.Triggers>
<DataTrigger Binding="{Binding NoDecimalConvertor}" Value="False" >
<Setter Property="StringFormat" Value="true" />
</DataTrigger>
</Style.Triggers>
</Style>
Я уже несколько дней бьюсь головой об этом, поэтому мы будем благодарны за любые указания относительно наилучшего способа приблизиться к этому.