WPF:RadGridView设置某些单元格的模板

时间:2015-10-19 17:17:30

标签: c# wpf telerik grid radgridview

我有这样的网格:

<telerik:RadGridView x:Name="DataG"
 ItemsSource="{Binding CamposUsu}"
 SelectedItem="{Binding Selected}"
 CanUserReorderColumns="True"
 CanUserResizeColumns="True"
 CanUserSortColumns="False"
 SelectionUnity="FullRow"
 IsReadyOnly="True"
 AutoGenerateColumns="False"
 Loaded="DataG_Loaded" />

在.cs文件中,方法DataG_Loaded:

private void DataG_Loaded(object sender, RoutedEventesArgs e)
{
   DataTemplate labelTemplate = new DataTemplate();

            FrameworkElementFactory label = new FrameworkElementFactory(typeof(Label));
            label.SetValue(Label.ContentProperty, "Unlimited");

            labelTemplate.VisualTree = label;

            labelTemplate.Seal();

            this.DataG.Columns[7].CellTemplate = labelTemplate; 
            //this column 7 is a column called "Vl." with double values
}

好吧,当我评论方法DataG_Loaded时,我的网格在我的viewmodel上创建的对象正确完成。 当我取消注释方法时,列&#34; Vl。&#34;它的价值如&#34; 93.5&#34;,&#34; 108.9&#34; ...全部用值&#34;无限制&#34;来实现。

这已经预料到了。 我只想要值>&gt;的单元格100.0转向字符串&#34;无限制&#34;。例如:

Example

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以在数据绑定中为XAML中的该列使用值转换器,而不是使用网格的Loaded事件。

实施例

创建一个继承IValueConverter的新类:

public class UnlimitedNumberConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       if (((float)value) > 100)
           return "Unlimited";

        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

向XAML添加资源以访问转换器:

<converters:UnlimitedNumberConverter x:Key="UnlimitedNumberConverter"/>

其中“converter”是在XAML窗口/用户控件顶部声明的命名空间别名:

xmlns:converters="clr-namespace:MyApplication.Converters"

然后通过XAML引用数据绑定中的转换器:

{Binding VI_Value, Converter={StaticResource UnlimitedNumberConverter}}