[Ironruby-core] ListViewItem DataTemplate

Patrick Brown patrickcbrown at gmail.com
Wed Nov 25 14:03:11 EST 2009


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20091125/32216f89/attachment.html>


More information about the Ironruby-core mailing list