代码之家  ›  专栏  ›  技术社区  ›  fuzzyman

带Ironpython和DataGrid的Silverlight数据绑定

  •  0
  • fuzzyman  · 技术社区  · 16 年前

    我们在Ironpython 2.6和 Silverlight for Databinding,基于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时,解析器的属性值不正确(因此不希望 加载后设置绑定):

    <GradientStop x:Name="bubbleColor" Offset="0.694" Color="{Binding color}" />
    

    我尝试的一种方法是创建一个价值转换器。这里是 我创建的类的骨架:

    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 回复  |  直到 16 年前
        1
  •  1
  •   Henrik Söderlund    16 年前

    我对Ironpython一无所知,但我知道无论使用何种语言,您都无法绑定到Silverlight中的颜色。这引起了我许多不满。在Silverlight 3中,只能绑定FrameworkElement上的属性,而且由于GradientStop是一个DependencyObject,因此它将不起作用。好消息是Silverlight4将摆脱这种限制,允许您在DependencyObject上绑定属性。不过我还没试过,所以我不能肯定。更多信息在这里:
    http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx#dobind

    现在,您可以做的是在椭圆上绑定fill属性。但是你必须在你的转换器代码中创建整个LinearGradientBrush,所以这有点复杂。

    推荐文章