WPF:更改代码背后的模板中的绑定

时间:2016-04-05 13:51:54

标签: .net wpf datagrid telerik radgridview

我的目标是将WPF项目中RadGridView中单元格的背景颜色格式化为基础数据中的值。这些数据是动态的,但我不能使用预定义的模板

我的基础表中有RGB值(尽管有空格而不是逗号,所以我使用转换器来修复它),在我有一个“颜色”列和模板的测试项目中,一切都很有效: / p>

    <Window.Resources>

    <local:StringToBrushConverter x:Key="lStringToBrushConverter"></local:StringToBrushConverter>

    <DataTemplate x:Key="ColourCellTemplate">
        <Border Name="lBorder" BorderThickness="3" Margin="1" CornerRadius="1" Width="100"
                BorderBrush="{Binding Colour, Converter={StaticResource lStringToBrushConverter}}">
            <TextBlock Background="{Binding ElementName=lBorder, Path=BorderBrush}" ></TextBlock> 
        </Border>
    </DataTemplate>

</Window.Resources>

现在的问题是如何使用此模板在动态方案中使用。基本上我需要改变的是这部分中的“颜色”:

BorderBrush="{Binding Colour, Converter={StaticResource lStringToBrushConverter}}"

但我不确定如何在代码隐藏中实现这一点。我可以使用TryFindResource来获取DataTemplate,但更改Binding的下一步是我被困住的地方。

我查看了来自Telerik的this示例,该示例在将值与另一个值进行比较时在不同情况下有效,但它无法解决我的问题。

非常感谢..

1 个答案:

答案 0 :(得分:0)

如果我从注释中正确理解了您的问题,您可以使用转换器绑定到整个对象(而不是某些特定属性,如Color),并在转换器中检查它的属性:

public class ColorColumnsConverter : IValueConverter {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        if (value == null || value == DependencyProperty.UnsetValue)
            return null;
        var folder = value as Folder; // some of your data types
        if (folder != null) {
            return folder.ColorProperty;
        }
        var jpegFile = value as JpegFile; // some another of your data types
        if (jpegFile != null) {
            return jpegFile.Colour;
        }
        // etc
        return null;            
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        throw new NotImplementedException();
    }
}