[Ironruby-core] ListViewItem DataTemplate

Ivan Porto Carrero ivan at flanders.co.nz
Thu Nov 26 03:48:24 EST 2009


There is no link between the DLR objects and CLR objects so if you derive
from a control in ruby code there is no way for XAML to figure out what has
been configured etc. There is also no class it can link to as the classes
don't exist in the same way in a DLR based language as in a CLR language.

The following control tries to make that integration easier but it's still
very early days and all help is wanted.
http://dynamicscriptcontrol.codeplex.com/
http://code.google.com/p/dynamic-script-control/

Nick Rickets may be of help, I think he's got a WPF application with
IronRuby that is deployed AFAIK

I think it's important to understand that there is a difference between a
DLR and a CLR based language. CLR classes map straight to CLR-types but this
isn't always the case in a DLR based language because they have a difference
on opinion with the CLR on how classes should behave.
The CLR says ALL classes are CLOSED that means you can't modify anything
once it's compiled then it only does its job and doesn't learn new tricks
The DLR (for IronRuby and IronPython at least) says ALL classes are OPEN,
you can freeze some making them closed.  Meaning once  you're program is
running you can modify classes by adding or removing methods and so on.
Because of this reason x:Class doesn't know where to go because for the CLR
the type may very well not exist.

This doesn't help you much but it's a start to figure out what's going on
and why things don't work the same as with C#


I'm sorry but I keep deleting the following message from every email I sent
to help you:

Naming conventions!
in ruby stuff is lowercased_and_underscored except for constants or there is
a particularly good reason for you to want an uppercased name like a DSL
entry point. UpperCased names are constants in Ruby and as such people
wanting to help you (in this case me) have an easier time getting through
your code as they don't have to workout what they are looking at. Constants
include ModuleNames, ClassNames and CONSTANT_VALUES

in C# stuff is CamelCasedAndNotUnderscored.

.
---
Met vriendelijke groeten - Best regards - Salutations
Ivan Porto Carrero
Blog: http://flanders.co.nz
Google Wave: portocarrero.ivan at googlewave.com
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)



On Wed, Nov 25, 2009 at 8:03 PM, Patrick Brown <patrickcbrown at gmail.com>wrote:

> Hello
>
>    Has anyone gotten a datatemplate for a ListView under WPF?  I created a
> very simple C# sample and converted it to IronRuby, the C# works perfectly,
> the IronRuby example displays my class name, the datatemplate didn't load
> and bind up to the properties as I hoped.
>
> C#
>     public class StatusListView : ListView
>     {
>         public StatusListView()
>         {
>             var items = new[]
>                 {
>                     new { message = "One", messageType = "Status" },
>                     new { message = "Two", messageType = "Error" },
>                     new { message = "Shree", messageType = "Status" }
>                 };
>             FrameworkElementFactory textblock = new
> FrameworkElementFactory(typeof(TextBlock));
>
>             Setter setter = new Setter();
>             setter.Property = TextBlock.FontSizeProperty;
>             setter.Value = 18.0;
>
>             DataTrigger dataTrigger = new DataTrigger();
>             dataTrigger.Binding = new Binding("messageType");
>             dataTrigger.Value = "Status";
>             dataTrigger.Setters.Add(setter);
>
>             Style style = new Style(typeof(TextBlock));
>             style.Triggers.Add(dataTrigger);
>
>             textblock.SetValue(TextBlock.StyleProperty, style);
>             textblock.SetBinding(TextBlock.TextProperty, new
> Binding("message"));
>             DataTemplate template = new DataTemplate();
>             template.VisualTree = textblock;
>             ItemsSource = items;
>             ItemTemplate = template;
>         }
>     }
>
>
>    IronRuby - in this sample my listview itemsource is actually set in
> another piece of code as so.  As I state above, the item does show up in the
> listview but the datatemplate is not applied against it.
>
> self.buildMessages = Array.new
> self.buildMessages.push(BuildMessage.new("Test","Status"))
> self.statusListView.ItemsSource = self.buildMessages
>
>
> class StatusListView < ListView
>  def initialize()
>   HorizontalAlignment = HorizontalAlignment.Stretch
>   Margin = Thickness.new(0,5,0,5)
>   MinHeight = 200
>
>   BuildItemTemplate()
>  end
>
>  def BuildItemTemplate()
>   begin
>    textblock = FrameworkElementFactory.new(TextBlock.to_clr_type)
>
>    setter = Setter.new
>    setter.Property = TextBlock.FontSizeProperty
>    setter.Value = 14.0
>
>    dataTrigger = DataTrigger.new
>    dataTrigger.Binding = System::Windows::Data::Binding.new("messageType")
>    dataTrigger.Value = "Status"
>    dataTrigger.Setters.Add(setter)
>
>    style = Style.new(TextBlock.to_clr_type)
>    style.Triggers.Add(dataTrigger)
>
>    textblock.SetValue(TextBlock.StyleProperty, style)
>    textblock.SetBinding(TextBlock.TextProperty,
> System::Windows::Data::Binding.new("message"))
>
>    template = DataTemplate.new
>    template.VisualTree = textblock
>    ItemTemplate = template
>   rescue Exception => e
>    puts "#{e}"
>   end
>  end
> end
>
> Thanks for your time and thoughts
> Patrick
>
> _______________________________________________
> Ironruby-core mailing list
> Ironruby-core at rubyforge.org
> http://rubyforge.org/mailman/listinfo/ironruby-core
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20091126/db560208/attachment-0001.html>


More information about the Ironruby-core mailing list