Понадобился мне Binding к тексту TextBlock-а вот такого вида:
Вариантов несколько.
1. Использовать статические ресурсы.
Собственно создаем конвертор:
Правим Binding:
2. Второй вариант, это использовать статический класс, вместо статического ресурса. Т.к. мне лень переделывать тот пример, я покажу как можно изменять цвет фона в зависимости от данных которые лежат в DataContext.
Начинаем с того, что создаем класс конвертор:
Пишем к нему вот такую статическую обертку:
С применение обоих конверторов выглядеть будет вот так:
Мне если честно нравится первый вариант.
P.s. По типам и картинке догадались, что за программу я пишу?
Text="{Binding Fields["Assigned To"].Value}"Само собой, что это работать не будет. Как сделать чтобы работало? Смотрим далее.
Вариантов несколько.
1. Использовать статические ресурсы.
Собственно создаем конвертор:
class AssignedToConvertor : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string result = ""; WorkItem current = value as WorkItem; if (current != null) { result = current.Fields["Assigned To"].Value.ToString(); } return result; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } }Прописываем ссылку на текущий namespace у контрола который будет использовать конвертер:
xmlns:local="clr-namespace:Здесь_пространство_имен_где_объявлен_класс_конвертор"Добавляем ресурс:
<Grid> <Grid.Resources> <local:AssignedToConvertor x:Key="AssignedToConvertor" />
Правим Binding:
Ура, все заработало!Text="{Binding Converter={StaticResource AssignedToConvertor}}"
2. Второй вариант, это использовать статический класс, вместо статического ресурса. Т.к. мне лень переделывать тот пример, я покажу как можно изменять цвет фона в зависимости от данных которые лежат в DataContext.
Начинаем с того, что создаем класс конвертор:
class WorkItemTypeToColorConvertor : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { SolidColorBrush result = null; WorkItem current = value as WorkItem; if (current != null) { switch (current.Type.Name) { case "Task": result = new SolidColorBrush(Colors.Yellow); break; case "Bug": result = new SolidColorBrush(Color.FromRgb(255, 210, 210)); break; } } return result; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } }
Пишем к нему вот такую статическую обертку:
static class WorkItemTypeToColorConvertorHolder { public static readonly WorkItemTypeToColorConvertor Instance = new WorkItemTypeToColorConvertor(); }И тогда уже нет необходимости прописывать статический ресурс. прямо в Binding пишем:
<Rectangle Fill="{Binding Converter={x:Static local:WorkItemTypeToColorConvertorHolder.Instance}}"
С применение обоих конверторов выглядеть будет вот так:
Мне если честно нравится первый вариант.
P.s. По типам и картинке догадались, что за программу я пишу?
Комментариев нет:
Отправить комментарий