Wpf 如何更改RadGridView中特定单元格的格式

Wpf 如何更改RadGridView中特定单元格的格式,wpf,mvvm,binding,telerik,radgridview,Wpf,Mvvm,Binding,Telerik,Radgridview,所以我有一个动态的RadGridView。这意味着我以编程方式向控件添加列。基本上是这样的: for (int i = 0; i < length; i++) { Binding b = new Binding(string.Format("Collection[{0}].ValueIWant", i)); binding.StringFormat = "{0:0.##}"; GridViewDataColumn column = new GridViewDataC

所以我有一个动态的RadGridView。这意味着我以编程方式向控件添加列。基本上是这样的:

for (int i = 0; i < length; i++)
{
    Binding b = new Binding(string.Format("Collection[{0}].ValueIWant", i));
    binding.StringFormat = "{0:0.##}";
    GridViewDataColumn column = new GridViewDataColumn()
    {
        Header = HeaderFor(i),
        DataMemberBinding = b,
        DataType = typeof(double?)
    };

    Control.columns.Add(column);
}
public class RowToFormattedValueConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var rowData = (MyModelType)value;
        string formattedResult;
        if (rowData.IsPerecentageRow) 
        {
            formattedResult= string.Format("{0:P1}", rowData.ValueIWant);
        }
        else
        {
            formattedResult= string.Format("{0:0.##}", rowData.ValueIWant);
        }
        return formattedResult;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
for(int i=0;i
现在我需要添加新的行来显示行
1和2
2和3
之间的百分比,依此类推

我已经设法做到了,但我不确定如何专门为这些单元格而不是整个列更改String.format

我想到了CellTemplateSelector,但我不确定这是否是个好主意,因为这可能意味着我必须重新设置绑定,而不知道
I
等的值。另外,我只想更改绑定上的string.format


当我将数字作为一个双精度(0,5是50%,50是5000%)进行操作时,我想我也必须屏蔽输入。不确定String.Format是否也适用于我,或者我是否应该使用
RadMaskedInput

使用
IValueConverter
将每行的列值转换为相应的表示形式。因此,对于计算列上的绑定,请使用:

// bind to the row data itself, not any specific property
Binding b = new Binding();
b.Converter = new RowToFormattedValueConverter
这将向转换器发送完整的行数据;因此,您应该能够使用行的某些现有属性来确定它是哪种类型(常规或百分比),或者添加一个额外的隐藏属性/列来显式指定它。转换器的外观如下所示:

for (int i = 0; i < length; i++)
{
    Binding b = new Binding(string.Format("Collection[{0}].ValueIWant", i));
    binding.StringFormat = "{0:0.##}";
    GridViewDataColumn column = new GridViewDataColumn()
    {
        Header = HeaderFor(i),
        DataMemberBinding = b,
        DataType = typeof(double?)
    };

    Control.columns.Add(column);
}
public class RowToFormattedValueConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var rowData = (MyModelType)value;
        string formattedResult;
        if (rowData.IsPerecentageRow) 
        {
            formattedResult= string.Format("{0:P1}", rowData.ValueIWant);
        }
        else
        {
            formattedResult= string.Format("{0:0.##}", rowData.ValueIWant);
        }
        return formattedResult;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

您想设置处于编辑模式的单元格格式吗?仅在显示模式下就足以获得奖金,但我也会尝试在编辑中进行掩码输入。GridView的
数据源是什么(或者如果没有数据源,如何填充行)?有时我因为森林而看不到树。我注意到Telerik有一个RowStyleSelector,因此我可以轻松地为我想要的行设置样式。我让这条路变得比需要的更复杂。