【问题标题】:Silverlight databinding with IronPython and DatagridSilverlight 数据绑定与 IronPython 和 Datagrid
【发布时间】:2010-02-08 20:54:01
【问题描述】:

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

http://gui-at.blogspot.com/2009/11/inotifypropertychanged-and-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 中使用这个转换器。尝试在资源字典中引用 Converters 命名空间中的 ColorConverter 类再次导致加载 xaml 时崩溃。

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

【问题讨论】:

    标签: python silverlight data-binding datagrid ironpython


    【解决方案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 属性绑定到 Ellipse 上。但是你将不得不在你的转换器代码中创建整个 LinearGradientBrush,所以它有点复杂。

    【讨论】:

    • 好的,事实证明,因为在使用 clrtype 创建的类后面没有真正的(磁盘上)程序集,所以 xaml 加载用于查找值转换器的 Type.GetType 调用失败。看来我用这种方法注定要失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2014-10-17
    • 2010-11-22
    • 1970-01-01
    • 2015-06-23
    • 2013-01-26
    • 2011-05-15
    相关资源
    最近更新 更多