Silverlight数据绑定与IronPython和Datagrid

时间:2010-02-08 20:54:02

标签: python silverlight data-binding datagrid ironpython

我们已经成功地将clrtype与IronPython 2.6和 用于数据绑定的Silverlight,基于Lukás提供的示例(:

http://gui-at.blogspot.com/2009/11/inotifypropertychanged-and-databinding.html

我们以编程方式创建datagrid列时创建绑定。因为我们正在使用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中天真地指定绑定,那么我得到一个 当我尝试加载xaml时,PARSER_BAD_PROPERTY_VALUE(所以没有希望 加载后设置绑定):

<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 个答案:

答案 0 :(得分:1)

我对IronPython一无所知,但我知道无论使用何种语言,都无法绑定到Silverlight中的Color。这引起了我许多不满。在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

目前,您可以做的是绑定Ellipse上的Fill属性。但是你必须在转换器代码中创建整个LinearGradientBrush,所以它有点复杂。