Мы успешно используем clrtype с IronPython 2.6 и
Silverlight для привязки данных, основанный на примере, представленном Lukás (:
http://gui -at.blogspot.com / 2009/11 / INotifyPropertyChanged-и-databinding.html
Мы создаем привязку при программном создании столбцов сетки данных. Поскольку мы используем IronPython , некоторые методов статической привязки данных, которые вы обычно используете с C #, не работают.
Я пытался (и не смог) получить столбец в сетке
разные цвета на основе привязки данных.
У меня есть цветной пузырь , показывающий в сетке, но я не могу получить
привязка данных к цвету для работы. Сначала основы.
Это xaml для пузыря с фиксированным цветом:
<DataTemplate xmlns='http://schemas.microsoft.com/client/2007'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<Ellipse Stroke="#FF222222" Height="15" Width="15">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop x:Name="bubbleColor" Offset="0.694"
Color="#FF00FF40" />
<GradientStop Color="#FFE6E6E6"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
Я могу добавить столбец на основе этого шаблона очень просто. Функция loadXaml представляет собой тонкую оболочку вокруг XamlReader.Load
:
from com_modules.loadxaml import loadXaml
from System.Windows.Controls import DataGridTemplateColumn
column = DataGridTemplateColumn()
column.CellTemplate = loadXaml('templatecolumn')
column.Header = 'Bubble'
grid.Columns.Add(column)
Если я попытаюсь наивно указать привязку в xaml, то получу
PARSER_BAD_PROPERTY_VALUE, когда я пытаюсь загрузить xaml (поэтому нет надежды на
настройка привязки после загрузки):
<GradientStop x:Name="bubbleColor" Offset="0.694" Color="{Binding color}" />
Один из подходов, которые я попробовал, заключался в создании ValueConverter. Здесь
скелет класса, который я создал:
from System import Type
from System.Globalization import CultureInfo
from System.Windows.Data import IValueConverter
class ColorConverter(IValueConverter):
_clrnamespace = "Converters"
__metaclass__ = clrtype.ClrClass
@clrtype.accepts(object, Type, object, CultureInfo)
@clrtype.returns(object)
def Convert(self, value, targetType, parameter, culture):
pass
@clrtype.accepts(object, Type, object, CultureInfo)
@clrtype.returns(object)
def ConvertBack(self, value, targetType, parameter, culture):
pass
Поскольку указан _clrnamespace
, я подумал, что смогу использовать этот конвертер в xaml. Попытка сослаться на класс ColorConverter
в пространстве имен Converters
в словаре ресурсов снова вызывает взлеты при загрузке xaml.
Установка этого программного значения была бы идеальной. У кого-нибудь есть идеи?