<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>IIrrelevant - Mono</title>
    <link>http://www.milkcarton.com/blog/</link>
    <description>Irrelevant musings about software development</description>
    <language>en-us</language>
    <copyright>Dan Morphis</copyright>
    <lastBuildDate>Wed, 28 Jul 2010 06:53:29 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>blog@milkcarton.com</managingEditor>
    <webMaster>blog@milkcarton.com</webMaster>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=50ca5ba0-f5bf-48d8-a3ad-501b0521db2f</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,50ca5ba0-f5bf-48d8-a3ad-501b0521db2f.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,50ca5ba0-f5bf-48d8-a3ad-501b0521db2f.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=50ca5ba0-f5bf-48d8-a3ad-501b0521db2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Tonight, I did a presentation on "Developing a .NET application onMac OS X using MonoMac"
at the <a href="http://akdotnet.ning.com/">Alaska .NET Users Group</a> meeting. I
hope everyone enjoyed my presentation and learned something from it! I'd appreciate
any feedback anyone has to offer!
</p>
        <p>
        </p>
        <p>
The download link is at the end of this blog post. If you download the source, you
will probably want to review all the <a href="http://www.milkcarton.com/blog/CategoryView,category,MonoMac.aspx">posts
I've written on MonoMac</a> as well.
</p>
        <p>
          <img src="http://www.milkcarton.com/blog/content/binary/MovieTimes_screenshot.png" />
        </p>
        <h3>Source Code
</h3>
        <p>
          <a href="http://www.milkcarton.com/blog/content/binary/MovieTimes2.zip">
            <img src="http://www.milkcarton.com/blog/content/binary/Zip.png" />
            <br />
MovieTimes source code</a>
        </p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=50ca5ba0-f5bf-48d8-a3ad-501b0521db2f" />
      </body>
      <title>Source code for the MonoMac presentation</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,50ca5ba0-f5bf-48d8-a3ad-501b0521db2f.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/28/Source+Code+For+The+MonoMac+Presentation.aspx</link>
      <pubDate>Wed, 28 Jul 2010 06:53:29 GMT</pubDate>
      <description>&lt;p&gt;
Tonight, I did a presentation on "Developing a .NET application onMac OS X using MonoMac"
at the &lt;a href="http://akdotnet.ning.com/"&gt;Alaska .NET Users Group&lt;/a&gt; meeting. I
hope everyone enjoyed my presentation and learned something from it! I'd appreciate
any feedback anyone has to offer!&lt;p&gt;
&lt;p&gt;
The download link is at the end of this blog post. If you download the source, you
will probably want to review all the &lt;a href="http://www.milkcarton.com/blog/CategoryView,category,MonoMac.aspx"&gt;posts
I've written on MonoMac&lt;/a&gt; as well.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.milkcarton.com/blog/content/binary/MovieTimes_screenshot.png" /&gt;
&lt;/p&gt;
&lt;h3&gt;Source Code
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://www.milkcarton.com/blog/content/binary/MovieTimes2.zip"&gt;&lt;img src="http://www.milkcarton.com/blog/content/binary/Zip.png"&gt;
&lt;br /&gt;
MovieTimes source code&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=50ca5ba0-f5bf-48d8-a3ad-501b0521db2f" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,50ca5ba0-f5bf-48d8-a3ad-501b0521db2f.aspx</comments>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=334639e4-7e22-4df6-8239-e7d5a4433b65</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,334639e4-7e22-4df6-8239-e7d5a4433b65.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,334639e4-7e22-4df6-8239-e7d5a4433b65.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=334639e4-7e22-4df6-8239-e7d5a4433b65</wfw:commentRss>
      <title>Databinding to an NSTableView with a MonoMac app</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,334639e4-7e22-4df6-8239-e7d5a4433b65.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx</link>
      <pubDate>Mon, 05 Jul 2010 16:00:00 GMT</pubDate>
      <description>&lt;p&gt;
I’m working on my presentation for the &lt;a href="http://akdotnet.ning.com/"&gt;Alaska
.NET Users Group&lt;/a&gt;. My goal is to build an app that consumes a web service, and
displays the data. After getting the web service piece going, the next step was to
display that data in a NSTableView.
&lt;/p&gt;
&lt;p&gt;
I battled for hours and hours trying to figure out how to create a NSTableViewDataSource,
and it turns out I was making things way to complicated. I did some searching on the
web, but couldn’t really find anything except a &lt;a href="http://lists.ximian.com/pipermail/mono-osx/2010-June/002965.html"&gt;post&lt;/a&gt; by &lt;a href="http://twitter.com/moshakis"&gt;John
Moshakis&lt;/a&gt; on the Mono-osx mailing list which gave me some hope that someone had
figured it out.
&lt;/p&gt;
&lt;p&gt;
I emailed John, and he was gracious enough to send me some source code to work from.
It turns out, I what I had wasn’t far off the mark, I just needed a few pointers.
&lt;/p&gt;
&lt;h3&gt;The DataSource Code
&lt;/h3&gt;
&lt;div style="font-family: consolas,; font-size: small" class="csharp" #ffffff;?="#ffffff;?" background-color:="background-color:" monospace;="monospace;" courier,="courier," New?,="New?," Courier="Courier"&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;System&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;System.Collections&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;MonoMac.Foundation&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;MonoMac.AppKit&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;MovieTimes.BusinessLogic&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;using&lt;/span&gt; &lt;span style="color: #008080"&gt;System.Collections.Generic&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;[&lt;/span&gt;Register&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;quot;MyItemDataSource&amp;quot;&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; MyItemDataSource &lt;span style="color: #008000"&gt;:&lt;/span&gt; NSTableViewDataSource
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; List&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;MyItem&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt; MyItems &lt;span style="color: #008000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;static&lt;/span&gt; MyItemDataSource &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;[&lt;/span&gt;Export&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;quot;numberOfRowsInTableView:&amp;quot;&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;int&lt;/span&gt; numberOfRowsInTableView &lt;span style="color: #008000"&gt;(&lt;/span&gt;NSTableView
aTableView&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;if&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItems &lt;span style="color: #008000"&gt;==&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;null&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="color: #ff0000"&gt;0&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;return&lt;/span&gt; MyItems&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Count&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;[&lt;/span&gt;Export&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;quot;tableView:objectValueForTableColumn:row:&amp;quot;&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;]&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; NSObject
objectValueForTableColumn &lt;span style="color: #008000"&gt;(&lt;/span&gt;NSTableView aTableView,
NSTableColumn aTableColumn, &lt;span style="color: #6666cc; font-weight: bold"&gt;int&lt;/span&gt; rowIndex&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;return&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span style="color: #008000"&gt;new&lt;/span&gt;&lt;/a&gt; NSString&lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItems&lt;span style="color: #008000"&gt;[&lt;/span&gt;rowIndex&lt;span style="color: #008000"&gt;]&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Name&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; Items&lt;span style="color: #008000"&gt;(&lt;/span&gt;List&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;MyItem&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt; items&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
MyItems &lt;span style="color: #008000"&gt;=&lt;/span&gt; items&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; MyItemDataSourceDelegate &lt;span style="color: #008000"&gt;:&lt;/span&gt; NSTableViewDelegate &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;event&lt;/span&gt; EventHandler&lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt;MyItemChangedEventArgs&lt;span style="color: #008000"&gt;&amp;gt;&lt;/span&gt; MyItemChanged&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; MyItemDataSourceDelegate &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;:&lt;/span&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;base&lt;/span&gt;&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&amp;#160; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;override&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; SelectionDidChange&lt;span style="color: #008000"&gt;(&lt;/span&gt;NSNotification
notification&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
var table &lt;span style="color: #008000"&gt;=&lt;/span&gt; notification&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #6666cc; font-weight: bold"&gt;Object&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;as&lt;/span&gt; NSTableView&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
var ds &lt;span style="color: #008000"&gt;=&lt;/span&gt; table&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;DataSource&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;as&lt;/span&gt; MyItemDataSource&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
var rowNum &lt;span style="color: #008000"&gt;=&lt;/span&gt; table&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;SelectedRow&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;if&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;rowNum &lt;span style="color: #008000"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #ff0000"&gt;0&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;amp;&amp;amp;&lt;/span&gt; rowNum &lt;span style="color: #008000"&gt;&amp;lt;&lt;/span&gt; ds&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;MyItems&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;Count&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
OnMyItemChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span style="color: #008000"&gt;new&lt;/span&gt;&lt;/a&gt; MyItemChangedEventArgs&lt;span style="color: #008000"&gt;(&lt;/span&gt;ds&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;MyItems&lt;/span&gt;&lt;span style="color: #008000"&gt;[&lt;/span&gt;rowNum&lt;span style="color: #008000"&gt;]&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;protected&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; OnMyItemChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItemChangedEventArgs
e&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;if&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItemChanged &lt;span style="color: #008000"&gt;!=&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;null&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
MyItemChanged&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;this&lt;/span&gt;,
e&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;class&lt;/span&gt; MyItemChangedEventArgs &lt;span style="color: #008000"&gt;:&lt;/span&gt; EventArgs &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; MyItem
MyItem &lt;span style="color: #008000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; MyItemChangedEventArgs&lt;span style="color: #008000"&gt;(&lt;/span&gt;MyItem
i&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
MyItem &lt;span style="color: #008000"&gt;=&lt;/span&gt; i&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
The code is kind of long, and I’ve removed all the normal guard code you would use
for the sake of brevity. But lets dissect the code. The first part, lines 8 – 31 is
the actual data source. It simply listens for a few messages (numberOfRowsInTableView
and objectValueForTableColumn) and allows items to be added to the data source (line
28). The next part, lines 33 – 54 fire off an event when the selected item has changed
in the NSTableView instance.
&lt;/p&gt;
&lt;h3&gt;The Window Code
&lt;/h3&gt;
&lt;div style="font-family: consolas,; font-size: small" class="csharp" #ffffff;?="#ffffff;?" background-color:="background-color:" monospace;="monospace;" courier,="courier," New?,="New?," Courier="Courier"&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff; font-weight: bold"&gt;override&lt;/span&gt; &lt;span style="color: #6666cc; font-weight: bold"&gt;void&lt;/span&gt; WindowDidLoad &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt; &lt;span style="color: #008000"&gt;{&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;base&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WindowDidLoad&lt;/span&gt; &lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;
var myDel &lt;span style="color: #008000"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span style="color: #008000"&gt;new&lt;/span&gt;&lt;/a&gt; MyItemDataSourceDelegate&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;
myDel&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;ItemChanged&lt;/span&gt; &lt;span style="color: #008000"&gt;+=&lt;/span&gt; ItemChanged&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;this&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;someTable&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #6666cc; font-weight: bold"&gt;Delegate&lt;/span&gt; &lt;span style="color: #008000"&gt;=&lt;/span&gt; myDel&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="background-color: #f4f4f4"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff; font-weight: bold"&gt;this&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;someTable&lt;/span&gt;&lt;span style="color: #008000"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff"&gt;DataSource&lt;/span&gt; &lt;span style="color: #008000"&gt;=&lt;/span&gt; &lt;a href="http://www.google.com/search?q=new+msdn.microsoft.com"&gt;&lt;span style="color: #008000"&gt;new&lt;/span&gt;&lt;/a&gt; MyItemDataSource&lt;span style="color: #008000"&gt;(&lt;/span&gt;&lt;span style="color: #008000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;
In the window controller, paste the above code to have code run when you window loads.
For WinForms people, public override void WindowDidLoad is the equivilent of protected
override void OnLoad().
&lt;/p&gt;
&lt;p&gt;
So what does the window controller code do? First off, we create our delegate (note,
delegates in Cocoa are &lt;strong&gt;not&lt;/strong&gt; the same thing as in C#), and wire up
to the changed event, then we assign the newly created delegate and a data source
to our table.
&lt;/p&gt;
&lt;p&gt;
Any questions, thoughts or feedback? Hit me up in the comments, or &lt;a href="http://twitter.com/akcoder"&gt;follow
me on twitter&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=334639e4-7e22-4df6-8239-e7d5a4433b65" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,334639e4-7e22-4df6-8239-e7d5a4433b65.aspx</comments>
      <category>C#</category>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=e31f3ad6-343d-4a2e-98a4-0e38a159b4c5</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,e31f3ad6-343d-4a2e-98a4-0e38a159b4c5.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,e31f3ad6-343d-4a2e-98a4-0e38a159b4c5.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e31f3ad6-343d-4a2e-98a4-0e38a159b4c5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For the past week or so, I've been developing a couple of sample apps in <a href="http://www.mono-project.com/">Mono</a> with
Cocoa on my Mac. In that time, I've struggled quite a bit, and learned quite a bit.
One of the biggest things I've learned is things are much harder when you try and
mix-in paradimes for which things were not designed.
</p>
        <p>
Take for example <a href="http://www.cocoadev.com/index.pl?NSTableViewTutorial">NSTableView</a>.
Because <a href="http://en.wikipedia.org/wiki/Objective-C">Objective-C</a> is <a href="http://en.wikipedia.org/wiki/Duck_typing">duck
typed</a>, you set Delegate property of your table to <em>this</em> (<em>self</em> in
Objective-C) and implement the selectionDidChange method and you will get notified
when a row is selected.
</p>
        <p>
Because C# is not <a href="http://en.wikipedia.org/wiki/Duck_typing">duck typed</a>,
you have to <a href="http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx">write
a whole lot of ceremony code</a> to get notified when a row is selected. And figuring
out that ceremony was a huge battle. I wouldn't have won the war without the help
of <a href="http://twitter.com/moshakis"> John Moshakis</a>. Another thing thats not
supported is <em>Register</em>ing a generic type, or setting a generic .NET type the
property of a Cocoa widget.
</p>
        <p>
That means the ceremony code has to be duplicated every time, for every different
type of object. I actually tried to make a generic version of my <a href="http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx">Databinding
to an NSTableView</a> blog post, but I was thwarted by an "Invalid IL exception."
Hopefully this is just a defect, and not a limitation when dealing with Cocoa.
</p>
        <p>
I would file a defect on this issue with the mono project, but Novell requires you
to create an account to add a defect to their bug tracker. I can understand why they
want you to do this, but its not a very good way to encourage participation from the
community. But I guess it is a particularly good way to discourage drive-by defect
reports.
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=e31f3ad6-343d-4a2e-98a4-0e38a159b4c5" />
      </body>
      <title>Some thoughts on mono and Cocoa</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,e31f3ad6-343d-4a2e-98a4-0e38a159b4c5.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/05/Some+Thoughts+On+Mono+And+Cocoa.aspx</link>
      <pubDate>Mon, 05 Jul 2010 09:28:36 GMT</pubDate>
      <description>&lt;p&gt;
For the past week or so, I've been developing a couple of sample apps in &lt;a href="http://www.mono-project.com/"&gt;Mono&lt;/a&gt; with
Cocoa on my Mac. In that time, I've struggled quite a bit, and learned quite a bit.
One of the biggest things I've learned is things are much harder when you try and
mix-in paradimes for which things were not designed.
&lt;/p&gt;
&lt;p&gt;
Take for example &lt;a href="http://www.cocoadev.com/index.pl?NSTableViewTutorial"&gt;NSTableView&lt;/a&gt;.
Because &lt;a href="http://en.wikipedia.org/wiki/Objective-C"&gt;Objective-C&lt;/a&gt; is &lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;duck
typed&lt;/a&gt;, you set Delegate property of your table to &lt;em&gt;this&lt;/em&gt; (&lt;em&gt;self&lt;/em&gt; in
Objective-C) and implement the selectionDidChange method and you will get notified
when a row is selected.
&lt;/p&gt;
&lt;p&gt;
Because C# is not &lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;duck typed&lt;/a&gt;,
you have to &lt;a href="http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx"&gt;write
a whole lot of ceremony code&lt;/a&gt; to get notified when a row is selected. And figuring
out that ceremony was a huge battle. I wouldn't have won the war without the help
of &lt;a href="http://twitter.com/moshakis"&gt; John Moshakis&lt;/a&gt;. Another thing thats not
supported is &lt;em&gt;Register&lt;/em&gt;ing a generic type, or setting a generic .NET type the
property of a Cocoa widget.
&lt;/p&gt;
&lt;p&gt;
That means the ceremony code has to be duplicated every time, for every different
type of object. I actually tried to make a generic version of my &lt;a href="http://www.milkcarton.com/blog/2010/07/05/Databinding+To+An+NSTableView+With+A+MonoMac+App.aspx"&gt;Databinding
to an NSTableView&lt;/a&gt; blog post, but I was thwarted by an "Invalid IL exception."
Hopefully this is just a defect, and not a limitation when dealing with Cocoa.
&lt;/p&gt;
&lt;p&gt;
I would file a defect on this issue with the mono project, but Novell requires you
to create an account to add a defect to their bug tracker. I can understand why they
want you to do this, but its not a very good way to encourage participation from the
community. But I guess it is a particularly good way to discourage drive-by defect
reports.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=e31f3ad6-343d-4a2e-98a4-0e38a159b4c5" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,e31f3ad6-343d-4a2e-98a4-0e38a159b4c5.aspx</comments>
      <category>.NET</category>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=b5f4237b-5013-42b6-801f-1497bf066699</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,b5f4237b-5013-42b6-801f-1497bf066699.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,b5f4237b-5013-42b6-801f-1497bf066699.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b5f4237b-5013-42b6-801f-1497bf066699</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It took me quite a bit of battling tonight, and some of it turned out to be an OS
caching issue but I managed to set the application icon for my test MonoMac app.
</p>
        <p>
Take your favorite image and convert it to a .icns file, I used the <a href="http://iconverticons.com/">http://iconverticons.com/</a> website.
Drop the output of that into the root of your MonoDevelop project. Next, right click
on the file and set the “Build Action” to content.
</p>
        <p>
Double click on “Info.plist” in the root of your project, add a new item and set its
key to “Icon File”, and value to “icon” or what ever you named your icon file. Note,
you do not need to put the .icns extension in the value field to make things work.
</p>
        <p>
          <a href="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/HowtosettheapplicationiconforyourMonoMac_150D3/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/HowtosettheapplicationiconforyourMonoMac_150D3/image_thumb.png" width="244" height="95" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=b5f4237b-5013-42b6-801f-1497bf066699" />
      </body>
      <title>Setting the application icon for your MonoMac app</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,b5f4237b-5013-42b6-801f-1497bf066699.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/04/Setting+The+Application+Icon+For+Your+MonoMac+App.aspx</link>
      <pubDate>Sun, 04 Jul 2010 16:00:00 GMT</pubDate>
      <description>&lt;p&gt;
It took me quite a bit of battling tonight, and some of it turned out to be an OS
caching issue but I managed to set the application icon for my test MonoMac app.
&lt;/p&gt;
&lt;p&gt;
Take your favorite image and convert it to a .icns file, I used the &lt;a href="http://iconverticons.com/"&gt;http://iconverticons.com/&lt;/a&gt; website.
Drop the output of that into the root of your MonoDevelop project. Next, right click
on the file and set the “Build Action” to content.
&lt;/p&gt;
&lt;p&gt;
Double click on “Info.plist” in the root of your project, add a new item and set its
key to “Icon File”, and value to “icon” or what ever you named your icon file. Note,
you do not need to put the .icns extension in the value field to make things work.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/HowtosettheapplicationiconforyourMonoMac_150D3/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/HowtosettheapplicationiconforyourMonoMac_150D3/image_thumb.png" width="244" height="95" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=b5f4237b-5013-42b6-801f-1497bf066699" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,b5f4237b-5013-42b6-801f-1497bf066699.aspx</comments>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=5dfec1ca-2d74-4999-9c22-6fd7a5b637d4</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,5dfec1ca-2d74-4999-9c22-6fd7a5b637d4.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,5dfec1ca-2d74-4999-9c22-6fd7a5b637d4.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5dfec1ca-2d74-4999-9c22-6fd7a5b637d4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve followed <a href="http://monodevelop.com/">MonoDevelop</a> for a long time. In
that time, I’ve seen it go from a barely usable product, to now a fairly capable IDE.
Out of the box, it look and acts much like Visual Studio. I do like that that a dedicated
unit testing tab is present as a constant reminder that, “Hey, you know you should
probably write those unit tests you’ve always talked about writing.”
</p>
        <p>
One thing I was somewhat surprised to not see, at least on the Mac edition of MonoDevelop
is a built-in scheme for the VS keybindings. On the down side, I have been able to
crash MonoDevelop when I didn’t have some setup code in the right place and I ended
up with a null ref trying to talk to some Cocoa widgets.
</p>
        <p>
More to come as I spend more time with MonoDevelop.
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=5dfec1ca-2d74-4999-9c22-6fd7a5b637d4" />
      </body>
      <title>Some thoughts on using MonoDevelop</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,5dfec1ca-2d74-4999-9c22-6fd7a5b637d4.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/03/Some+Thoughts+On+Using+MonoDevelop.aspx</link>
      <pubDate>Sat, 03 Jul 2010 16:00:00 GMT</pubDate>
      <description>&lt;p&gt;
I’ve followed &lt;a href="http://monodevelop.com/"&gt;MonoDevelop&lt;/a&gt; for a long time. In
that time, I’ve seen it go from a barely usable product, to now a fairly capable IDE.
Out of the box, it look and acts much like Visual Studio. I do like that that a dedicated
unit testing tab is present as a constant reminder that, “Hey, you know you should
probably write those unit tests you’ve always talked about writing.”
&lt;/p&gt;
&lt;p&gt;
One thing I was somewhat surprised to not see, at least on the Mac edition of MonoDevelop
is a built-in scheme for the VS keybindings. On the down side, I have been able to
crash MonoDevelop when I didn’t have some setup code in the right place and I ended
up with a null ref trying to talk to some Cocoa widgets.
&lt;/p&gt;
&lt;p&gt;
More to come as I spend more time with MonoDevelop.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=5dfec1ca-2d74-4999-9c22-6fd7a5b637d4" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,5dfec1ca-2d74-4999-9c22-6fd7a5b637d4.aspx</comments>
      <category>.NET</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=454b3531-266d-40ee-821d-f86b18758acc</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,454b3531-266d-40ee-821d-f86b18758acc.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,454b3531-266d-40ee-821d-f86b18758acc.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=454b3531-266d-40ee-821d-f86b18758acc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When Miguel De Icaza <a href="http://tirania.org/blog/archive/2010/Apr-19.html">first
announced MonoMac</a> back in April I was pretty excited! Its been my goal for the
past two years to write a half-decent, <strong>native</strong> looking, Mac OSX application
with .NET. I’ve looked at the various Cocoa binding strategies for Mono and always
found them lacking. Some like <a href="http://www.mono-project.com/CocoaSharp">CocoaSharp</a> haven’t
been updated in ages, and the WinForms stuff on Mac looked plain fugly. Like Windows
95 fugly.
</p>
        <p>
I found <a href="http://mjhutchinson.com/journal/2010/06/09/monomac_in_monodevelop">Michael
Hutchinson’s quick-start post</a> on writing a simple .NET app using MonoMac. Because
I had previous experience using Interface Builder, I was able to muddle my way through
building his simple app. But at the end, I wanted something more. “Hello World” is
great to show you the most basic syntax of a language, and maybe how to use the compiler,
but it honestly does nothing for me.
</p>
        <p>
So, I set out to write real, although somewhat contrived image viewing application.
Having an extensive background writing WinForms, ASP.NET and some WPF apps, the hardest
part for me was trying to figure out the Cocoa equivalent to things like PictureBox,
and FolderBrowserDialog. But Google as always was my friend.
</p>
        <p>
I’m not going to dive into how to write the app tonight, but I will post a screen
shot, and the <a href="http://www.milkcarton.com/blog/content/binary/ImageViewer.zip">ImageViewer
source!</a><br /><a href="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/MyfirstMonoMacapplicationanditsnotHelloW_144FC/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/MyfirstMonoMacapplicationanditsnotHelloW_144FC/image_thumb.png" width="458" height="439" /></a></p>
        <h4>Nits
</h4>
        <p>
Yes Cocoa is based on an MVC architecture, and yes I should have put some of the code
into a business class, but I didn’t. 
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=454b3531-266d-40ee-821d-f86b18758acc" />
      </body>
      <title>My first MonoMac application, and its not “Hello World”</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,454b3531-266d-40ee-821d-f86b18758acc.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/07/02/My+First+MonoMac+Application+And+Its+Not+Hello+World.aspx</link>
      <pubDate>Fri, 02 Jul 2010 15:22:00 GMT</pubDate>
      <description>&lt;p&gt;
When Miguel De Icaza &lt;a href="http://tirania.org/blog/archive/2010/Apr-19.html"&gt;first
announced MonoMac&lt;/a&gt; back in April I was pretty excited! Its been my goal for the
past two years to write a half-decent, &lt;strong&gt;native&lt;/strong&gt; looking, Mac OSX application
with .NET. I’ve looked at the various Cocoa binding strategies for Mono and always
found them lacking. Some like &lt;a href="http://www.mono-project.com/CocoaSharp"&gt;CocoaSharp&lt;/a&gt; haven’t
been updated in ages, and the WinForms stuff on Mac looked plain fugly. Like Windows
95 fugly.
&lt;/p&gt;
&lt;p&gt;
I found &lt;a href="http://mjhutchinson.com/journal/2010/06/09/monomac_in_monodevelop"&gt;Michael
Hutchinson’s quick-start post&lt;/a&gt; on writing a simple .NET app using MonoMac. Because
I had previous experience using Interface Builder, I was able to muddle my way through
building his simple app. But at the end, I wanted something more. “Hello World” is
great to show you the most basic syntax of a language, and maybe how to use the compiler,
but it honestly does nothing for me.
&lt;/p&gt;
&lt;p&gt;
So, I set out to write real, although somewhat contrived image viewing application.
Having an extensive background writing WinForms, ASP.NET and some WPF apps, the hardest
part for me was trying to figure out the Cocoa equivalent to things like PictureBox,
and FolderBrowserDialog. But Google as always was my friend.
&lt;/p&gt;
&lt;p&gt;
I’m not going to dive into how to write the app tonight, but I will post a screen
shot, and the &lt;a href="http://www.milkcarton.com/blog/content/binary/ImageViewer.zip"&gt;ImageViewer
source!&lt;/a&gt; 
&lt;br /&gt;
&lt;a href="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/MyfirstMonoMacapplicationanditsnotHelloW_144FC/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.milkcarton.com/blog/content/binary/WindowsLiveWriter/MyfirstMonoMacapplicationanditsnotHelloW_144FC/image_thumb.png" width="458" height="439" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h4&gt;Nits
&lt;/h4&gt;
&lt;p&gt;
Yes Cocoa is based on an MVC architecture, and yes I should have put some of the code
into a business class, but I didn’t. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=454b3531-266d-40ee-821d-f86b18758acc" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,454b3531-266d-40ee-821d-f86b18758acc.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>Mac OS X</category>
      <category>Mono</category>
      <category>MonoMac</category>
    </item>
    <item>
      <trackback:ping>http://www.milkcarton.com/blog/Trackback.aspx?guid=0d33fdd7-7525-475a-8f8c-a31bd43faadb</trackback:ping>
      <pingback:server>http://www.milkcarton.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.milkcarton.com/blog/PermaLink,guid,0d33fdd7-7525-475a-8f8c-a31bd43faadb.aspx</pingback:target>
      <dc:creator>Dan Morphis</dc:creator>
      <wfw:comment>http://www.milkcarton.com/blog/CommentView,guid,0d33fdd7-7525-475a-8f8c-a31bd43faadb.aspx</wfw:comment>
      <wfw:commentRss>http://www.milkcarton.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0d33fdd7-7525-475a-8f8c-a31bd43faadb</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This morning I thought I would sit down with my Mac and play with doing .NET development
for OS X. I had previously tried, but always found things to be really frustrating.
All the Cocoa bindings were out of date, and the WinForms stuff looked terrible, etc.
But <a href="http://tirania.org/blog/archive/2010/Apr-19.html">Miguel wrote a blog
post</a> a while back indicating they are getting serious about developing a <b>native</b> solution
for OS X.
</p>
        <p>
I <a href="http://mjhutchinson.com/files/md/MonoDevelop-MonoMac-Experimental-2010-06-08.dmg">downloaded
the experimental version</a> of <a href="http://monodevelop.com/Download">MonoDevelop
2.4</a> from <a href="http://mjhutchinson.com/journal/2010/06/09/">Michael Hutchinson
blog</a> but quickly found out the experimental version of MonoDevelop (based on 2.4
RC 4) was out dated. So I upgraded to MonoDevelop 2.4, opened it, and noticed that
MonoMac wasn't an available add-in in the RTM version of MonoDevelop.
</p>
        <p>
So I did what any self respecting geek would do, I started digging around inside the
bundle for the experimental version of MonoDevelop from Michael Hutchinson, and found
the MonoMac addin hidden inside at the path MonoDevelop.app/Contents/MacOS/lib/monodevelop/Addins/MonoDevelop.MonoMac.
I copied the folder to the appropriate place of the RTM version of MonoDevelop 2.4
and everything works as expected! 
</p>
        <h3>Download it
</h3>
        <p>
          <a href="http://monodevelop.com/files/MacOSX/releases/MonoDevelop-2.4.dmg">Download
MonoDevelop</a>, copy it to your Applications folder. then open the contents of MonoDevelop.app,
and extract <a href="http://www.milkcarton.com/blog/content/binary/MonoDevelop.MonoMac.zip" style="text-decoration: line-through;">MonoDevelop.MonoMac</a> to
Contents/MacOS/lib/monodevelop/Addins/. Restart MonoDevelop, and now you should be
able to create a new MonoMac project!
</p>
        <h3>Update
</h3>
        <p>
I missed two other files that updated in MonoDevelop.IPhone, <a href="http://www.milkcarton.com/blog/content/binary/MonoDevelop.Addins.zip">download
the new MonoDevelop.Addins.zip (490.49 KB)</a> and extract it to the same place.
</p>
        <img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=0d33fdd7-7525-475a-8f8c-a31bd43faadb" />
      </body>
      <title>Use the new MonoMac addin in the latest version of MonoDevelop</title>
      <guid isPermaLink="false">http://www.milkcarton.com/blog/PermaLink,guid,0d33fdd7-7525-475a-8f8c-a31bd43faadb.aspx</guid>
      <link>http://www.milkcarton.com/blog/2010/06/26/Use+The+New+MonoMac+Addin+In+The+Latest+Version+Of+MonoDevelop.aspx</link>
      <pubDate>Sat, 26 Jun 2010 23:02:05 GMT</pubDate>
      <description>&lt;p&gt;
This morning I thought I would sit down with my Mac and play with doing .NET development
for OS X. I had previously tried, but always found things to be really frustrating.
All the Cocoa bindings were out of date, and the WinForms stuff looked terrible, etc.
But &lt;a href="http://tirania.org/blog/archive/2010/Apr-19.html"&gt;Miguel wrote a blog
post&lt;/a&gt; a while back indicating they are getting serious about developing a &lt;b&gt;native&lt;/b&gt; solution
for OS X.
&lt;/p&gt;
&lt;p&gt;
I &lt;a href="http://mjhutchinson.com/files/md/MonoDevelop-MonoMac-Experimental-2010-06-08.dmg"&gt;downloaded
the experimental version&lt;/a&gt; of &lt;a href="http://monodevelop.com/Download"&gt;MonoDevelop
2.4&lt;/a&gt; from &lt;a href="http://mjhutchinson.com/journal/2010/06/09/"&gt;Michael Hutchinson
blog&lt;/a&gt; but quickly found out the experimental version of MonoDevelop (based on 2.4
RC 4) was out dated. So I upgraded to MonoDevelop 2.4, opened it, and noticed that
MonoMac wasn't an available add-in in the RTM version of MonoDevelop.
&lt;/p&gt;
&lt;p&gt;
So I did what any self respecting geek would do, I started digging around inside the
bundle for the experimental version of MonoDevelop from Michael Hutchinson, and found
the MonoMac addin hidden inside at the path MonoDevelop.app/Contents/MacOS/lib/monodevelop/Addins/MonoDevelop.MonoMac.
I copied the folder to the appropriate place of the RTM version of MonoDevelop 2.4
and everything works as expected! 
&lt;h3&gt;Download it
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://monodevelop.com/files/MacOSX/releases/MonoDevelop-2.4.dmg"&gt;Download
MonoDevelop&lt;/a&gt;, copy it to your Applications folder. then open the contents of MonoDevelop.app,
and extract &lt;a href="http://www.milkcarton.com/blog/content/binary/MonoDevelop.MonoMac.zip" style="text-decoration: line-through;"&gt;MonoDevelop.MonoMac&lt;/a&gt; to
Contents/MacOS/lib/monodevelop/Addins/. Restart MonoDevelop, and now you should be
able to create a new MonoMac project!
&lt;/p&gt;
&lt;h3&gt;Update
&lt;/h3&gt;
&lt;p&gt;
I missed two other files that updated in MonoDevelop.IPhone, &lt;a href="http://www.milkcarton.com/blog/content/binary/MonoDevelop.Addins.zip"&gt;download
the new MonoDevelop.Addins.zip (490.49 KB)&lt;/a&gt; and extract it to the same place.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.milkcarton.com/blog/aggbug.ashx?id=0d33fdd7-7525-475a-8f8c-a31bd43faadb" /&gt;</description>
      <comments>http://www.milkcarton.com/blog/CommentView,guid,0d33fdd7-7525-475a-8f8c-a31bd43faadb.aspx</comments>
      <category>Mac OS X</category>
      <category>Mono</category>
    </item>
  </channel>
</rss>