2010-02-08 3 views
0

Мы успешно используем 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.

Настройка этого программного обеспечения была бы идеальной. У кого-нибудь есть идеи?

ответ

1

Я ничего не знаю о IronPython, но я знаю, что вы не можете привязываться к цвету в Silverlight независимо от используемого языка. Это вызвало у меня много обид. В Silverlight 3 вы можете привязывать свойства только к элементу FrameworkElement, и поскольку GradientStop является DependencyObject, это не сработает. Хорошей новостью является то, что Silverlight 4 избавится от этого ограничения и позволит вам привязать свойства к DependencyObject. Я еще не пробовал, поэтому не могу сказать точно. Больше информации здесь:
http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx#dobind

В настоящий момент вы можете связать свойство Fill на Эллипсе. Но тогда вам нужно будет создать весь LinearGradientBrush в коде конвертера, так что это немного сложно.

+0

Хорошо, и получается, что, поскольку на классах, созданных с помощью clrtype, нет реальной (на диске), вызов Type.GetType, который загружает xaml, чтобы найти преобразователь значений, не работает. Похоже, я немного обречен на неудачу при таком подходе. – fuzzyman

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