簡體   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