繁体   English   中英

使用IronPython和Datagrid进行Silverlight数据绑定

[英]Silverlight databinding with IronPython and Datagrid

根据Lukás提供的示例,我们已成功将clrtype与IronPython 2.6和Silverlight进行数据绑定。

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中使用此转换器。 再次尝试在资源字典中的Converters命名空间中引用ColorConverter类会导致加载xaml时崩溃。

以编程方式进行设置将是理想的。 任何人有任何想法吗?

我对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,因此有点复杂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM