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