У меня есть GridView
, где столбцы могут быть связаны с числовыми значениями c. Я использую его для переключения стиля на основе значения модели представления. Т.е. если оно отрицательное, я хочу отображать красный, если оно положительное, то оно должно отображаться черным, а если оно равно 0, я вообще не хочу отображать значение.
Моя проблема связана с возможностью повторного использования StyleSelector
public class AmountStyleSelector : StyleSelector
{
public override Style SelectStyle(object item, DependencyObject container)
{
if (!(item is TransactionVm tran))
return null;
var header = ((GridViewBoundColumnBase)((GridViewCellBase)container).Column).Header;
Style Local(decimal value)
{
if (value == 0) return Empty;
return value <= 0 ? Negative : Positive;
}
// OMG what, surely there is a better way,
// other than switch on the column header name?
return header switch
{
"Debit" => Local(tran.Amount.Debit),
"Credit" => Local(tran.Amount.Credit),
"Total" => Local(tran.Amount.Total),
"Balance" => Local(tran.Amount.Balance),
_ => Positive
};
}
public Style Negative { get; set; }
public Style Positive { get; set; }
public Style Empty { get; set; }
}
. Как вы можете видеть, это жестко связано с именем столбца, чтобы выбрать значение модели представления (которое на самом деле является связанное значение).
Есть ли способ вместо этого работать с фактическим значением привязки?
Игнорируя здесь визуальное дерево, было бы неплохо сделать что-то подобное ...
var column = ((GridViewBoundColumnBase)((GridViewCellBase)container).Column);
var value = column.BindingProperty.GetActualTrueToGodBoundValue();