[IronPython] Question Regarding WPF : DataBinding, DataTemplates and C# Extensions
Ivan Porto Carrero
ivan at flanders.co.nz
Tue Nov 4 12:16:06 CET 2008
Michael is right.
The control still does have some limitations. When I finish my IronRuby book
I'll look at changing some of the implementation.
At this moment you would need a create a formatter for ironpython
You can view the RubyFormatter here:
http://code.google.com/p/dynamic-script-control/source/browse/trunk/src/DynamicScriptControl/Formatters/RubyFormatter.cs?r=22
Then all that is left to do is to replace the notimplementedexception on the
converter
http://code.google.com/p/dynamic-script-control/source/browse/trunk/src/DynamicScriptControl/ScriptConverter.cs?r=22
---
Met vriendelijke groeten - Best regards - Salutations
Ivan Porto Carrero
GSM: +32.486.787.582
Blog: http://flanders.co.nz
Twitter: http://twitter.com/casualjim
On Tue, Nov 4, 2008 at 12:02 PM, Michael Foord <fuzzyman at voidspace.org.uk>wrote:
> Simon Dahlbacka wrote:
>
>> As the error message says, it cannot find the type LocalTimes.
>>
>>
>
> You may be interested in DynamicScriptControl:
>
> http://www.codeplex.com/dynamicscriptcontrol
>
> It needs a bit (but not much) work to get it working with IronPython.
>
> From the project page:
>
> We created a control that can be used with WPF or Silverlight to integrate
> DLR based controls into the xaml so that they can participate a little
> better into XAML based applications..
>
>
> At this moment the control only supports IronRuby but that will soon
> change.
>
> This project on codeplex will only hold releases if you're interested in
> the source code or contributing look for us at:
> http://code.google.com/p/dynamic-script-control
>
> I blogged about its usage:
> http://flanders.co.nz/2008/06/12/dynamic-script-control/
>
> Michael
>
> Normally you have to map an xml namespace into the corresponding clr
>> namespace by adding something along the lines of
>>
>> xmlns:src="clr-namespace:Whatever.Namespace;assembly=TheAssemblyName"
>>
>> to the xaml file
>>
>> and then you would declare the objectDataProvider like this instead
>>
>> <ObjectDataProvider x:Key="localTimes" ObjectType="{x:Type
>> src:LocalTimes}"/>
>>
>> However, I'm not sure how it works if you don't put LocalTimes in a
>> namespace
>>
>>
>>
>>
>> On Mon, Nov 3, 2008 at 6:08 PM, Dino Viehland <dinov at microsoft.com<mailto:
>> dinov at microsoft.com>> wrote:
>>
>> Declaring an interface from Python is easy:
>>
>>
>> import System
>>
>> class MyComparer(System.IComparable):
>>
>> def CompareTo(self, other):
>>
>> print 'compared'
>>
>> return -1
>>
>>
>> a = MyComparer()
>>
>> b = MyComparer()
>>
>> c = MyComparer()
>>
>> l = System.Collections.ArrayList([a,b,c])
>>
>> l.Sort()
>>
>>
>> prints:
>>
>>
>> compared
>>
>> compared
>>
>> compared
>>
>> compared
>>
>> compared
>>
>>
>> Unfortunately I don't know enough about WPF to know why you'd get
>> the exception you're seeing. One thing that might help would be
>> running with –X:ExceptionDetail so you get the full .NET stack
>> trace as well. That might help someone else on the list identify
>> what's going on.
>>
>>
>> *From:* users-bounces at lists.ironpython.com
>> <mailto:users-bounces at lists.ironpython.com>
>> [mailto:users-bounces at lists.ironpython.com
>> <mailto:users-bounces at lists.ironpython.com>] *On Behalf Of *Rob Oakes
>> *Sent:* Sunday, November 02, 2008 9:01 PM
>> *To:* users at lists.ironpython.com <mailto:users at lists.ironpython.com>
>> *Subject:* [IronPython] Question Regarding WPF : DataBinding,
>> DataTemplates and C# Extensions
>>
>>
>> Dear Group,
>>
>>
>> I have a rather involved question (more accurately series of
>> questions) regarding WPF, particularly how it relates to
>> DataBinding and DataTemplates. I will do my best to keep this
>> posting to a reasonable length, but ... well ... I guess this
>> serves somewhat as a warning ;) If you will spare me a bit of
>> background, I recently began trying to learn IronPython after
>> hearing an enthusiastic endorsement from a friend and colleague.
>> While not a programmer or computer scientist by training (on the
>> opposite of the spectrum, actually, my degree is in biomedical
>> engineering); I have found myself increasing needing to work with
>> programming tools in the past few years. This friend pointed me
>> toward the .Net framework, and IronPython in particular as a
>> potential solution to several major issues we have been facing
>> with our primary data processing tool: Matlab.
>>
>>
>> As a trial test, I therefore decided to create a small program in
>> IronPython, namely, a Podcast Aggregator. I purchased a Manning
>> Early Access Program copy of Michael Foord's (excellent BTW) book,
>> IronPython in Action and started trying to work toward my small
>> test project. As I also wanted to learn WPF (not to mention make
>> my little program as pretty as possible), I decided to write the
>> user interface for my aggregator in .xaml.
>>
>>
>> So, with that background out of the way, I arrive at a few
>> questions. The first of these is somewhat of a follow-up to a
>> topic addressed in May on this very list somewhat recently
>> (reference:
>>
>> http://lists.ironpython.com/pipermail/users-ironpython.com/2007-May/004912.html).
>> In the original post, the author (Bish Bosh) asked what the best
>> method of referring to Python types in Xaml was. Later in the
>> discussion, Dino Viehland offered that it might be best to:
>>
>>
>> "Declare an interface in C# (or find an existing one which has
>> what you want) and inherit and implement the interfaces in
>> Python. Then the interface will be the bridge between the static
>> and dynamic worlds" (reference:
>>
>> http://lists.ironpython.com/pipermail/users-ironpython.com/2007-May/004913.html
>> ).
>>
>>
>> So, my first question: After reading all the material I have been
>> able to find on the subject, I have not been able to locate a good
>> tutorial or example of how this might be done. Might it be
>> possible to get some additional information on how this can be
>> accomplished? A simple example of how it can then be integrated
>> into IronPython code would be extremely appreciated.
>>
>>
>> I have made an effort using the information available in the
>> IronPython tutorial and a relatively simple XAML example
>> (reference:
>>
>> http://blah.winsmarts.com/2007-3-WPF__The_DataTemplate,_choosing_how_your_data_will_look_like.aspx
>> ),
>> but I have had no luck in creating a test application that will
>> successfully load and perform as advertised.
>>
>>
>> Using the xaml, C# and mainWindow.py file below, I receive the error:
>>
>>
>> SystemError: Type reference cannot find public type named 'LocalTimes'
>>
>>
>> I am at the end of my rope and am not sure what I should try
>> next. Are there any ideas on how I might successfully implement a
>> custom C# interface?
>>
>>
>> Sincerely,
>>
>>
>> Rob Oakes
>>
>>
>> PS, Here is the source code for the simple test case I have been
>> working with.
>>
>>
>> << Main IPY script, called from command line with ipy TestApp.py
>>
>>
>> import clr
>>
>> import os
>>
>> import WindowsRSS
>>
>> clr.AddReference("PresentationFramework")
>>
>> clr.AddReference("PresentationCore")
>>
>> clr.AddReferenceToFile("IFancyData.dll")
>>
>>
>> import LocalTimes, LocalTime
>>
>>
>> from System.IO import File
>>
>> from System.Windows.Markup import XamlReader from
>> System.ComponentModel import INotifyPropertyChanged from
>> System.ComponentModel import PropertyChangedEventArgs from
>> System.Windows import Application, Window
>>
>>
>> class TestApp(object):
>>
>>
>> def __init__(self):
>>
>> xamlStream = File.OpenRead('DataBinding_20081102.xaml')
>>
>> self.Root = XamlReader.Load(xamlStream)
>>
>> self.LocalTimes = LocalTimes()
>>
>>
>> mainWin = TestApp()
>>
>> app = Application()
>>
>> app.Resources.Add('collection', LocalTimes())
>>
>> app.Run(mainWin.Root)
>>
>>
>> >>
>>
>> << DataBinding_20081102.xaml - GUI Window
>>
>>
>> <Window
>> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
>>
>> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>>
>> Title="Hello World!" Height="300" Width="300">
>>
>> <Window.Resources>
>>
>> <ObjectDataProvider x:Key="localTimes"
>> ObjectType="{x:Type LocalTimes}"/>
>>
>> </Window.Resources>
>>
>> <Grid>
>>
>> </Grid>
>>
>> </Window>
>>
>>
>> >>
>>
>> << LocalTimes.cs - Custom C# Class - LocalTimes
>>
>>
>> using System;
>>
>> using System.Collections;
>>
>> using System.Collections.Generic;
>>
>>
>> public class LocalTimes : List<LocalTime> {
>>
>>
>> public LocalTimes() {
>>
>> this.Add(new LocalTime("New York", DateTime.Now));
>>
>> this.Add(new LocalTime("Chicago",
>> DateTime.Now.AddHours(-1)));
>>
>> this.Add(new LocalTime("Denver",
>> DateTime.Now.AddHours(-2)));
>>
>> this.Add(new LocalTime("Los Angeles",
>> DateTime.Now.AddHours(-3)));
>>
>> }
>>
>> }
>>
>>
>> public class LocalTime {
>>
>>
>> private string place;
>>
>> private DateTime time;
>>
>>
>> public LocalTime(string _place, DateTime _time) {
>>
>>
>> place = _place;
>>
>> time = _time;
>>
>> }
>>
>>
>> public DateTime Time {
>>
>> get { return time; }
>>
>> set { time = value; }
>>
>> }
>>
>>
>> public string Place {
>>
>>
>> get { return place; }
>>
>> }
>>
>> }
>>
>>
>> >>
>>
>> Interpreter Output from the above files:
>>
>>
>> File C:\Users\Rob
>> Oakes\AppData\IronPython\IPy-Tutorial\TestApp_20081102.py, line
>> 23, in Initialize
>>
>> File C:\Users\Rob
>> Oakes\AppData\IronPython\IPy-Tutorial\TestApp_20081102.py, line
>> 20, in __init__
>>
>> File , line 0, in Load##106
>>
>> File PresentationFramework, line unknown, in Load
>>
>> File PresentationFramework, line unknown, in XmlTreeBuildDefault
>>
>> File PresentationFramework, line unknown, in Parse
>>
>> File PresentationFramework, line unknown, in ParseFragment
>>
>> File PresentationFramework, line unknown, in _Parse
>>
>> File PresentationFramework, line unknown, in ReadXaml
>>
>> File PresentationFramework, line unknown, in Read
>>
>> SystemError: Type reference cannot find public type named
>> 'LocalTimes'.
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com <mailto:Users at lists.ironpython.com>
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>
>
> --
> http://www.ironpythoninaction.com/
> http://www.voidspace.org.uk/blog
>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20081104/478a9c9b/attachment.html>
More information about the Ironpython-users
mailing list