[Ironruby-core] ListViewItem DataTemplate

Ivan Porto Carrero ivan at flanders.co.nz
Fri Nov 27 12:17:55 EST 2009


Yeah sorry for that.. I guess I'm not a morning person

keep sending questions, helps me to understand the areas people have trouble
with :)
---
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 Fri, Nov 27, 2009 at 5:59 PM, Patrick Brown <patrickcbrown at gmail.com>wrote:

> Hi
>
>    Thank you, this explanation is very helpful.  I will start working on
> following the naming conventions, I have actually been purposefully avoiding
> them to this point as following the C# standards was helping me to map
> commonalities between the two languages and focus on learning the language
> and tools themselves.
>
> Thanks, I appreciate all of your help
> Patrick
>
> On Thu, Nov 26, 2009 at 3:48 AM, Ivan Porto Carrero <ivan at flanders.co.nz>wrote:
>
>> 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
>>>
>>>
>>
>> _______________________________________________
>> Ironruby-core mailing list
>> Ironruby-core at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>
>>
>
> _______________________________________________
> 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/20091127/aaf21c99/attachment-0001.html>


More information about the Ironruby-core mailing list