Мы успешно используем clrtype с IronPython 2.6 и Silverlight для привязки данных, на основе примера, приведенный Лукас (:Silverlight привязки данных с IronPython и Datagrid
http://gui-at.blogspot.com/2009/11/inotifypropertychanged-and-databinding.html
Мы создаем связывание, когда мы создаем в DataGrid столбцы Programatically. Поскольку мы используем IronPython некоторые статических методов Databinding вы обычно используете C# не работают.
Я пытался (и отсутствии), чтобы получить столбец в гр id показать различные цвета, основанные на привязке данных.
У меня есть цветной пузырь , показывающий в сетке, но не может получить привязка к цвету для работы. Сначала основы.
Это 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.
Настройка этого программного обеспечения была бы идеальной. У кого-нибудь есть идеи?
Хорошо, и получается, что, поскольку на классах, созданных с помощью clrtype, нет реальной (на диске), вызов Type.GetType, который загружает xaml, чтобы найти преобразователь значений, не работает. Похоже, я немного обречен на неудачу при таком подходе. – fuzzyman