2016-04-05 3 views
1

Моя цель - отформатировать цвет фона ячейки в RadGridView в моем проекте WPF как значение значения в базовых данных. Эти данные являются динамическими, поэтому я не могу использовать заранее определенные шаблоныWPF: изменение привязки в шаблоне в коде

В моей базовой таблице есть значения RGB (хотя вместо пробелов вместо пробелов, поэтому я использую конвертер для исправления) и в тестовом проекте, где у меня был один столбец «цвет» и шаблон, все работало лакомство:

<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, но следующий шаг для изменения привязки - это то место, где я застрял.

Я посмотрел на this пример от Telerik, который работает в разных обстоятельствах, когда значение сравнивается с другим значением, но оно не решает мою проблему.

Большое спасибо ..

+0

Так почему же CellTemplateSelector не помогает? Он позволяет выбирать шаблон на основе элемента данных, который, как вам кажется, вам нужен. – Evk

+0

Ну, я мог бы иметь сотни строк с другим значением, и я не хочу создавать шаблон для каждого случая. Это будет работать, если у меня есть, например, просто красный, синий, зеленый или что-то, но значения RGB выбираются пользователем с помощью набора цветов. – miriyo

+0

Ваша проблема не ясна тогда. У вас есть значения RGB в каждой строке, представленной свойством Color. Почему вы не можете просто привязываться к Color, как вы описываете, зачем менять привязку? Или вы имеете в виду, что разница в том, что у вас есть 3 столбца (R, G и B) вместо одного? – Evk

ответ

0

Если я правильно понимаю вашу проблему правильно от комментариев, вы можете просто связываются весь объект (не в какой-то конкретный объект недвижимости, как цвет) с преобразователем, и конвертер инспектировать его свойства:

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(); 
    } 
} 
+0

Привет, я редактировал свой шаблон, чтобы просто привязать ко всему DataRow, и когда я проверяю значение в моем «RGB to Color converter» при отладке, я вижу эту строку. Снова у меня нет заранее определенных таблиц, поэтому мне нужно указать шаблон или конвертировать имя столбца, о котором идет речь, в какой-то момент. – miriyo

+0

А, вы используете DataRow, это необычно в наши дни. Тогда просто просмотрите столбцы этой DataRow.Table.Columns, найдите те, которые вам нужны, а затем извлеките значения из вашего DataRow. – Evk

+0

У меня все еще есть проблема, что я не знаю, в какой колонке используется Конвертер. У меня, конечно же, объект DataRow как значение, но мне нужен способ передать имя поля с помощью параметра – miriyo

Смежные вопросы