﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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/"><channel><title>博客园-Clingingboy</title><link>http://www.cnblogs.com/Clingingboy/</link><description>&amp;lt;clingingboy:control runat=&amp;quot;server&amp;quot;&amp;nbsp; /&amp;gt;
Get Ready For WPF &amp;&amp; SilverLight
</description><language>zh-cn</language><lastBuildDate>Fri, 05 Dec 2008 01:50:11 GMT</lastBuildDate><pubDate>Fri, 05 Dec 2008 01:50:11 GMT</pubDate><ttl>60</ttl><item><title>WPF and SL RadioButtonList Tip</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/11/03/1325420.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Mon, 03 Nov 2008 06:03:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/11/03/1325420.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1325420.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/11/03/1325420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1325420.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1325420.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在以下情境下.使用数据绑定分离UI与后端Model，有两个RadioButton,用于选择True or False(如果用CheckBox则就没这么多复杂的问题了).</p> <p>&nbsp;</p> <p>实现步骤如下，</p> <p>(1)用ListBox定义一个RadioButton模板</p><pre class="code"><span style="color: green">&lt;!--for RadioButton ListBox--&gt;
</span><span style="color: blue">&lt;</span><span style="color: #a31515">Style </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Key</span><span style="color: blue">="HorizontalRadioButtonListStyle" </span><span style="color: red">TargetType</span><span style="color: blue">="ListBox"&gt;
    &lt;</span><span style="color: #a31515">Style.Resources</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">Style </span><span style="color: red">TargetType</span><span style="color: blue">="ListBoxItem"&gt;
            &lt;</span><span style="color: #a31515">Setter </span><span style="color: red">Property</span><span style="color: blue">="Template"&gt;
                &lt;</span><span style="color: #a31515">Setter.Value</span><span style="color: blue">&gt;
                    &lt;</span><span style="color: #a31515">ControlTemplate </span><span style="color: red">TargetType</span><span style="color: blue">="ListBoxItem"&gt;
                        &lt;</span><span style="color: #a31515">Grid </span><span style="color: red">Margin</span><span style="color: blue">="2"&gt;
                            &lt;</span><span style="color: #a31515">Grid.ColumnDefinitions</span><span style="color: blue">&gt;
                                &lt;</span><span style="color: #a31515">ColumnDefinition </span><span style="color: red">Width</span><span style="color: blue">="Auto" /&gt;
                                &lt;</span><span style="color: #a31515">ColumnDefinition </span><span style="color: blue">/&gt;
                            &lt;/</span><span style="color: #a31515">Grid.ColumnDefinitions</span><span style="color: blue">&gt;
                            &lt;</span><span style="color: #a31515">RadioButton </span><span style="color: red">IsChecked</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">IsSelected</span><span style="color: blue">,  
                                </span><span style="color: red">RelativeSource</span><span style="color: blue">={</span><span style="color: #a31515">RelativeSource </span><span style="color: red">TemplatedParent</span><span style="color: blue">},  
                                </span><span style="color: red">Mode</span><span style="color: blue">=TwoWay}" /&gt;
                            &lt;</span><span style="color: #a31515">ContentPresenter </span><span style="color: red">Grid.Column</span><span style="color: blue">="1" </span><span style="color: red">Margin</span><span style="color: blue">="2,0,0,0" /&gt;
                        &lt;/</span><span style="color: #a31515">Grid</span><span style="color: blue">&gt;
                    &lt;/</span><span style="color: #a31515">ControlTemplate</span><span style="color: blue">&gt;
                &lt;/</span><span style="color: #a31515">Setter.Value</span><span style="color: blue">&gt;
            &lt;/</span><span style="color: #a31515">Setter</span><span style="color: blue">&gt;
        &lt;/</span><span style="color: #a31515">Style</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">Style.Resources</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">Setter </span><span style="color: red">Property</span><span style="color: blue">="ItemsPanel"&gt;
        &lt;</span><span style="color: #a31515">Setter.Value</span><span style="color: blue">&gt;
            &lt;</span><span style="color: #a31515">ItemsPanelTemplate</span><span style="color: blue">&gt;
                &lt;</span><span style="color: #a31515">WrapPanel </span><span style="color: red">Orientation</span><span style="color: blue">="Horizontal"  /&gt;
            &lt;/</span><span style="color: #a31515">ItemsPanelTemplate</span><span style="color: blue">&gt;
        &lt;/</span><span style="color: #a31515">Setter.Value</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">Setter</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">Setter </span><span style="color: red">Property</span><span style="color: blue">="BorderThickness" </span><span style="color: red">Value</span><span style="color: blue">="0" /&gt;
    &lt;</span><span style="color: #a31515">Setter </span><span style="color: red">Property</span><span style="color: blue">="Background" </span><span style="color: red">Value</span><span style="color: blue">="Transparent" /&gt;
&lt;/</span><span style="color: #a31515">Style</span><span style="color: blue">&gt;</span></pre>
<p>(2)定义类型转换器(以传入的参数进行判定)</p>
<p><a href="http://11011.net/software/vspaste"></a>&nbsp;</p><pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">MulitBooleanConverter </span>: <span style="color: #2b91af">IValueConverter
</span>{
    <span style="color: blue">#region </span>IValueConverter Members

    <span style="color: blue">public object </span>Convert(<span style="color: blue">object </span>value, <span style="color: #2b91af">Type </span>targetType, <span style="color: blue">object </span>parameter, System.Globalization.<span style="color: #2b91af">CultureInfo </span>culture)
    {
        <span style="color: blue">int </span>serviceParameter =<span style="color: blue">int</span>.Parse(parameter.ToString());
        <span style="color: blue">bool </span>isOnservice=(<span style="color: blue">bool</span>)value;
        <span style="color: blue">bool </span>result = <span style="color: blue">false</span>;
        <span style="color: blue">switch </span>(serviceParameter)
        {
            <span style="color: blue">case </span>0:
                 result = <span style="color: blue">true </span>&amp;&amp; isOnservice;
                <span style="color: blue">break</span>;
            <span style="color: blue">case </span>1:
                
                result = !isOnservice;
                <span style="color: blue">break</span>;
            
        }
        <span style="color: blue">return </span>result;
    }

    <span style="color: blue">public object </span>ConvertBack(<span style="color: blue">object </span>value, <span style="color: #2b91af">Type </span>targetType, <span style="color: blue">object </span>parameter, System.Globalization.<span style="color: #2b91af">CultureInfo </span>culture)
    {
        <span style="color: blue">int </span>serviceParameter = <span style="color: blue">int</span>.Parse(parameter.ToString());
        <span style="color: blue">bool </span>isOnservice = (<span style="color: blue">bool</span>)value;
        <span style="color: blue">bool </span>result = <span style="color: blue">false</span>;
        <span style="color: blue">switch </span>(serviceParameter)
        {
            <span style="color: blue">case </span>0:
                result = <span style="color: blue">true </span>&amp;&amp; isOnservice;
                <span style="color: blue">break</span>;
            <span style="color: blue">case </span>1:
                result = <span style="color: blue">false </span>&amp;&amp; isOnservice;
                <span style="color: blue">break</span>;

        }
        <span style="color: blue">return </span>value;
    }
    <span style="color: blue">#endregion
</span>}
</pre>
<p>(3)使用如下(同时双向绑定一个属性xxx)</p><pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">ListBox </span><span style="color: red">Style</span><span style="color: blue">="{</span><span style="color: #a31515">StaticResource </span><span style="color: red">HorizontalRadioButtonListStyle</span><span style="color: blue">}"</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">ListBox.Items</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">ListBoxItem</span><span style="color: blue"> </span><span style="color: red">IsSelected</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">xxx</span><span style="color: blue">,</span><span style="color: red">Converter</span><span style="color: blue">={</span><span style="color: #a31515">StaticResource </span><span style="color: red">boolConverter</span><span style="color: blue">},</span><span style="color: red">ConverterParameter</span><span style="color: blue">=</span>0<span style="color: blue">}"&gt;</span><span style="color: #a31515">在线</span><span style="color: blue">&lt;/</span><span style="color: #a31515">ListBoxItem</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">ListBoxItem</span><span style="color: blue"> </span><span style="color: red">IsSelected</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">xxx</span><span style="color: blue">,</span><span style="color: red">Converter</span><span style="color: blue">={</span><span style="color: #a31515">StaticResource </span><span style="color: red">boolConverter</span><span style="color: blue">},</span><span style="color: red">ConverterParameter</span><span style="color: blue">=</span>1<span style="color: blue">}"&gt;</span><span style="color: #a31515">离线</span><span style="color: blue">&lt;/</span><span style="color: #a31515">ListBoxItem</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">ListBox.Items</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">ListBox</span><span style="color: blue">&gt;</span></pre><pre class="code"><span style="color: blue"></span>&nbsp;</pre><pre class="code"><span style="color: blue"></span>&nbsp;</pre><a href="http://11011.net/software/vspaste"></a><img src ="http://www.cnblogs.com/Clingingboy/aggbug/1325420.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43795/" target="_blank">[新闻]UserAgent的历史变迁</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>初始化集合项依赖属性</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/11/03/1325402.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Mon, 03 Nov 2008 05:38:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/11/03/1325402.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1325402.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/11/03/1325402.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1325402.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1325402.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在wpf自定义属性时，若此属性为集合类型的话,如下</p><pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">DemoControl </span>: <span style="color: #2b91af">Control
</span>{  
    <span style="color: blue">public </span><span style="color: #2b91af">List</span>&lt;<span style="color: blue">string</span>&gt; Items
    {
        <span style="color: blue">get </span>{ <span style="color: blue">return </span>(<span style="color: #2b91af">List</span>&lt;<span style="color: blue">string</span>&gt;)GetValue(ItemsProperty); }
        
    }
    <span style="color: green">// Using a DependencyProperty as the backing store for Items.  This enables animation, styling, binding, etc...
    </span><span style="color: blue">public static readonly </span><span style="color: #2b91af">DependencyProperty </span>ItemsProperty =
        <span style="color: #2b91af">DependencyProperty</span>.Register(<span style="color: #a31515">"Items"</span>, <span style="color: blue">typeof</span>(<span style="color: #2b91af">List</span>&lt;<span style="color: blue">string</span>&gt;), <span style="color: blue">typeof</span>(<span style="color: #2b91af">DemoControl</span>), <span style="color: blue">new </span><span style="color: #2b91af">UIPropertyMetadata</span>(<span style="color: blue">new </span><span style="color: #2b91af">List</span>&lt;<span style="color: blue">string</span>&gt;()));

}</pre>
<p><a href="http://11011.net/software/vspaste"></a>&nbsp;</p>
<p><font face="Courier New" color="#0000ff"></font>使用情况</p><pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">local</span><span style="color: blue">:</span><span style="color: #a31515">DemoControl </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Name</span><span style="color: blue">="demoControl1"&gt;
    &lt;</span><span style="color: #a31515">local</span><span style="color: blue">:</span><span style="color: #a31515">DemoControl.Items</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">String</span><span style="color: blue">&gt;</span><span style="color: #a31515">string1</span><span style="color: blue">&lt;/</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">String</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">local</span><span style="color: blue">:</span><span style="color: #a31515">DemoControl.Items</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">local</span><span style="color: blue">:</span><span style="color: #a31515">DemoControl</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">local</span><span style="color: blue">:</span><span style="color: #a31515">DemoControl</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">local</span><span style="color: blue">:</span><span style="color: #a31515">DemoControl.Items</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">String</span><span style="color: blue">&gt;</span><span style="color: #a31515">string2</span><span style="color: blue">&lt;/</span><span style="color: #a31515">sys</span><span style="color: blue">:</span><span style="color: #a31515">String</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">local</span><span style="color: blue">:</span><span style="color: #a31515">DemoControl.Items</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">local</span><span style="color: blue">:</span><span style="color: #a31515">DemoControl</span><span style="color: blue">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a>&nbsp;</p>
<p>实际运行,Items属性的Count是2而不是1,这是因为其默认与所有实例共享.只需要在构造函数里初始化就可以了,设置为唯一的实例.</p><pre class="code"><span style="color: blue">public </span>DemoControl():<span style="color: blue">base</span>()
{
    SetValue(ItemsProperty, <span style="color: blue">new </span><span style="color: #2b91af">List</span>&lt;<span style="color: blue">string</span>&gt;()); 
}</pre>msdn上有更详细的解释.<img src ="http://www.cnblogs.com/Clingingboy/aggbug/1325402.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43795/" target="_blank">[新闻]UserAgent的历史变迁</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>wpf开发常见问题(1)</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/10/22/1317182.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Wed, 22 Oct 2008 13:42:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/10/22/1317182.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1317182.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/10/22/1317182.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1317182.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1317182.html</trackback:ping><description><![CDATA[摘要: 讨论一些wpf开发遇到的一些常见问题&nbsp;&nbsp;<a href='http://www.cnblogs.com/Clingingboy/archive/2008/10/22/1317182.html'>阅读全文</a><img src ="http://www.cnblogs.com/Clingingboy/aggbug/1317182.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43794/" target="_blank">[新闻]棱角分明: Google Reader 阅读器外观和功能更新</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>json格式化,统一格式?,前端与后端的矛盾</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/10/09/1307116.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Thu, 09 Oct 2008 04:07:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/10/09/1307116.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1307116.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/10/09/1307116.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1307116.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1307116.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 越来越多的js供我们来选择,在使用过程中插件会提供一个数据给我们进行填充.现在大部分的数据格式都是为json.这个格式就需要后端开发人员提供给前端了.web的软件无非就是后端给前端数据，然后前端再转数据类型.然而这个转换该如何来做?</p>
<p><strong>矛盾的产生:</strong></p>
<p><strong>1.前端的一个插件,下面以一个简单的jQuery插件为例子，这个方法可以帮助你为一个select标签添加项</strong></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_113047" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_113047').style.display='none'; document.getElementById('Code_Open_Image_113047').style.display='inline'; document.getElementById('Code_Open_Text_113047').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_113047" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_113047').style.display='none'; getElementById('Code_Closed_Image_113047').style.display='inline'; getElementById('Code_Closed_Text_113047').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_113047">Code</span><span id="Code_Open_Text_113047" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;$.fn.setSelect&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;self&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.empty();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.each(data,&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(i){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;oOption&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">option</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oOption.innerText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oOption.value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oOption.selected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.selected;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self[</span><span style="color: #000000">0</span><span style="color: #000000">].appendChild(oOption);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
<p>作为这个插件的开发者,感觉这个方法很完美.它要求json的传进来的格式是这样的.</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_113326" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_113326').style.display='none'; document.getElementById('Code_Open_Image_113326').style.display='inline'; document.getElementById('Code_Open_Text_113326').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_113326" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_113326').style.display='none'; getElementById('Code_Closed_Image_113326').style.display='inline'; getElementById('Code_Closed_Text_113326').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_113326">Code</span><span id="Code_Open_Text_113326" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;data&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;[&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{text:</span><span style="color: #000000">''</span><span style="color: #000000">,value:</span><span style="color: #000000">''</span><span style="color: #000000">},&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{text:</span><span style="color: #000000">''</span><span style="color: #000000">,value:</span><span style="color: #000000">''</span><span style="color: #000000">},&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{text:</span><span style="color: #000000">''</span><span style="color: #000000">,value:</span><span style="color: #000000">''</span><span style="color: #000000">},&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{text:</span><span style="color: #000000">''</span><span style="color: #000000">,value:</span><span style="color: #000000">''</span><span style="color: #000000">,selected:</span><span style="color: #0000ff">true</span><span style="color: #000000">}]&nbsp;</span></span></div>
<p>&nbsp;</p>
<p>然后我告诉<strong>后端开发人员</strong>,"你只要给我上面的格式就可以了".</p>
<p>这个时候插件的开发者并没有意识到这个世界上的数据接口并不是他说了算的,后端有着其自己的业务逻辑.</p>
<p>现在假设我要显示一个后端为Employee的列表</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_113716" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_113716').style.display='none'; document.getElementById('Code_Open_Image_113716').style.display='inline'; document.getElementById('Code_Open_Text_113716').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_113716" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_113716').style.display='none'; getElementById('Code_Closed_Image_113716').style.display='inline'; getElementById('Code_Closed_Text_113716').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_113716">Code</span><span id="Code_Open_Text_113716" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Employee<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name&nbsp;{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Guid&nbsp;Id&nbsp;{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;isOnline&nbsp;{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
<p>作为后端人员，最简单的做法如下</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_114021" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_114021').style.display='none'; document.getElementById('Code_Open_Image_114021').style.display='inline'; document.getElementById('Code_Open_Text_114021').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_114021" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_114021').style.display='none'; getElementById('Code_Closed_Image_114021').style.display='inline'; getElementById('Code_Closed_Text_114021').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_114021">Code</span><span id="Code_Open_Text_114021" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Employee</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetEmployeeList();<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;list.ToJSON();</span></span></div>
<p>&nbsp;</p>
<p>问题是Employee的属性不符合前端插件的要求.还好c# 3.0有匿名对象.还可以解决这个问题.现在更改后如下</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_114453" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_114453').style.display='none'; document.getElementById('Code_Open_Image_114453').style.display='inline'; document.getElementById('Code_Open_Text_114453').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_114453" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_114453').style.display='none'; getElementById('Code_Closed_Image_114453').style.display='inline'; getElementById('Code_Closed_Text_114453').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_114453">Code</span><span id="Code_Open_Text_114453" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Employee</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetEmployeeList();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;jsonList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;from&nbsp;employee&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;{&nbsp;text&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;employee.Name,&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;employee.Id,&nbsp;selected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;employee.isOnline&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;jsonList.ToJSON();</span></span></div>
<p>&nbsp;</p>
<p>后来后端人员发现,这样的情况实在太多了,好好的一个Employee对象，里面的属性全变成text,value,selected了...</p>
<p>这里便出现了矛盾,前端的接口也可以根据后端来定的。即数据也可以这样的</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_114822" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_114822').style.display='none'; document.getElementById('Code_Open_Image_114822').style.display='inline'; document.getElementById('Code_Open_Text_114822').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_114822" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_114822').style.display='none'; getElementById('Code_Closed_Image_114822').style.display='inline'; getElementById('Code_Closed_Text_114822').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_114822">Code</span><span id="Code_Open_Text_114822" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">var&nbsp;data</span><span style="color: #000000">=</span><span style="color: #000000">[{Name:</span><span style="color: #800000">''</span><span style="color: #000000">,Id:</span><span style="color: #800000">''</span><span style="color: #000000">,isOnline:""}];</span></span></div>
<p>&nbsp;</p>
<p>前端的开发者妥协了,无奈还是接收上面的数据.然后做了一个循环,把数据转成符合插件接口的数据.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_115243" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_115243').style.display='none'; document.getElementById('Code_Open_Image_115243').style.display='inline'; document.getElementById('Code_Open_Text_115243').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_115243" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_115243').style.display='none'; getElementById('Code_Closed_Image_115243').style.display='inline'; getElementById('Code_Closed_Text_115243').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_115243">Code</span><span id="Code_Open_Text_115243" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;transdateData</span><span style="color: #000000">=</span><span style="color: #000000">[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.each(data,</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;newData</span><span style="color: #000000">=</span><span style="color: #000000">{};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newData.text</span><span style="color: #000000">=</span><span style="color: #000000">data.Name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newData.value</span><span style="color: #000000">=</span><span style="color: #000000">data.Id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newData.selected</span><span style="color: #000000">=</span><span style="color: #000000">data.isOnline;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transdateData.push(newData);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></span></div>
<p>&nbsp;</p>
<p>这样的做法并不好，为了用插件在循环,数据量大了就见的出来了.当然我们的目标还是需要转换数据的,这个转换确实应该前端来做,但我们要换个方法.</p>
<p><strong>二.事件回调，格式化数据</strong></p>
<p><strong>改进插件的使用方法，在添加dom之前，格式化数据.现在插件代码如下,添加了一个formatEvent方法</strong></p>
<div class="cnblogs_code"><img id="Code_Closed_Image_115814" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_115814').style.display='none'; document.getElementById('Code_Open_Image_115814').style.display='inline'; document.getElementById('Code_Open_Text_115814').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_115814" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_115814').style.display='none'; getElementById('Code_Closed_Image_115814').style.display='inline'; getElementById('Code_Closed_Text_115814').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_115814">Code</span><span id="Code_Open_Text_115814" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;$.fn.setSelect&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(data,formatEvent){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;self&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.empty();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.each(data,&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(i){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(formatEvent)&nbsp;formatEvent(</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;oOption&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.createElement(</span><span style="color: #000000">"</span><span style="color: #000000">option</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oOption.innerText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oOption.value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oOption.selected&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.selected;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self[</span><span style="color: #000000">0</span><span style="color: #000000">].appendChild(oOption);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>&nbsp;</p>
<p>插件使用方法</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><img id="Code_Closed_Image_120432" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_120432').style.display='none'; document.getElementById('Code_Open_Image_120432').style.display='inline'; document.getElementById('Code_Open_Text_120432').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_120432" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_120432').style.display='none'; getElementById('Code_Closed_Image_120432').style.display='inline'; getElementById('Code_Closed_Text_120432').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_120432">Code</span><span id="Code_Open_Text_120432" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;data&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;[&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:</span><span style="color: #000000">'</span><span style="color: #000000">xx</span><span style="color: #000000">'</span><span style="color: #000000">,id:</span><span style="color: #000000">'</span><span style="color: #000000">xx</span><span style="color: #000000">'</span><span style="color: #000000">},&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{name:</span><span style="color: #000000">'</span><span style="color: #000000">xx</span><span style="color: #000000">'</span><span style="color: #000000">,id:</span><span style="color: #000000">'</span><span style="color: #000000">xx</span><span style="color: #000000">'</span><span style="color: #000000">}];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000">"</span><span style="color: #000000">#xx</span><span style="color: #000000">"</span><span style="color: #000000">).setSelect(data,</span><span style="color: #0000ff">function</span><span style="color: #000000">(e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.text</span><span style="color: #000000">=</span><span style="color: #000000">e.name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.value</span><span style="color: #000000">=</span><span style="color: #000000">e.id;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</span></span></div>
<p>&nbsp;</p>
<p>ok,这样问题就解决了，这种方式在很多地方都可以使用.小小技巧,分享一下.</p>
<img src ="http://www.cnblogs.com/Clingingboy/aggbug/1307116.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43793/" target="_blank">[新闻]雅虎董事伊坎迷恋微软 反对AOL前CEO米勒插足</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>jQuery插件管理方案</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/10/08/jQueryPluginsManage.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Wed, 08 Oct 2008 13:56:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/10/08/jQueryPluginsManage.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1306631.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/10/08/jQueryPluginsManage.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1306631.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1306631.html</trackback:ping><description><![CDATA[摘要:  jQuery发展趋势一片大好,这里向大家介绍一种管理jQuery插件的方案。可能有些人已经在系统中已经使用.使用原因：在开发过程中，jQuery插件的使用越来越多，且jQuery的某些插件是基于某些插件来使用了,且有先后顺序的问题.最初的做法:直接在页面上加载js.如下代码,其中使用了一些插件，其依赖于jQuery.其中用了一个jdMenu插件，其依赖于四个文件(jdMenu.css,jquer&nbsp;&nbsp;<a href='http://www.cnblogs.com/Clingingboy/archive/2008/10/08/jQueryPluginsManage.html'>阅读全文</a><img src ="http://www.cnblogs.com/Clingingboy/aggbug/1306631.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43792/" target="_blank">[新闻]微软任命雅虎前高管陆奇互联网业务总裁</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>wpf验证方法总结</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/08/24/1274934.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Sat, 23 Aug 2008 17:45:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/08/24/1274934.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1274934.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/08/24/1274934.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1274934.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1274934.html</trackback:ping><description><![CDATA[<p><strong>一.两步实现验证</strong></p> <p>(1)实现INotifyPropertyChanged接口,并为验证的属性添加需要验证的元数据</p> <p><strong></strong>&nbsp;</p><pre class="code">[<span style="color: #2b91af">StringLengthValidator</span>(1, 10, MessageTemplate = <span style="color: #a31515">"First Name must be between 1 and 15 characters"</span>)]
<span style="color: blue">public string </span>FirstName
{
    <span style="color: blue">get </span>{ <span style="color: blue">return this</span>.firstName; }
    <span style="color: blue">set
    </span>{
        <span style="color: blue">this</span>.firstName = <span style="color: blue">value</span>;
        <span style="color: blue">this</span>.OnPropertyChanged(<span style="color: #a31515">"FirstName"</span>);
    }
}</pre><a href="http://11011.net/software/vspaste"></a>
<p><strong></strong>&nbsp;</p>
<p>(2)在前端使用Validizor控件,为后端验证显示错误</p><pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">Validizor </span><span style="color: red">Source</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">FirstName</span><span style="color: blue">}"/</span><span style="color: blue">&gt;</span><span style="color: blue">
&lt;</span><span style="color: #a31515">TextBox </span><span style="color: red">Text</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">FirstName</span><span style="color: blue">,</span><span style="color: red">UpdateSourceTrigger</span><span style="color: blue">=PropertyChanged}"</span><span style="color: blue">/&gt;</span></pre><pre class="code"><span style="color: blue"></span>&nbsp;</pre><pre class="code"><span style="color: blue"><font color="#000000"><strong>二.使用EnterpriseLibrary验证组</strong></font></span></pre>
<p>(1)指定元数据<font color="#ff0000"><strong>Ruleset</strong></font>属性</p><pre class="code">[<span style="color: #2b91af">StringLengthValidator</span>(1, 20, MessageTemplate = <span style="color: #a31515">"Last Name must be between 1 and 20 characters"</span>, Ruleset = <span style="color: #a31515">"Default"</span>)]
<span style="color: blue">public string </span>LastName
{
    <span style="color: blue">get </span>{ <span style="color: blue">return this</span>.lastName; }
    <span style="color: blue">set
    </span>{
        <span style="color: blue">this</span>.lastName = <span style="color: blue">value</span>;
        <span style="color: blue">this</span>.OnPropertyChanged(<span style="color: #a31515">"LastName"</span>);
    }
}</pre>
<p>(2)前端控件同时指定<font color="#ff0000"><strong>Ruleset</strong></font>属性</p><pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">Validizor </span><span style="color: red">Source</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">LastName</span><span style="color: blue">}" </span><span style="color: red">Ruleset</span><span style="color: blue">="Default"&gt;</span></pre><pre class="code"><span style="color: blue"></span>&nbsp;</pre><pre class="code"><span style="color: blue"><strong><font color="#000000">三.wpf内置验证的缺陷</font></strong></span></pre><pre class="code"><span style="color: blue">(1)ui错误无法变更,验证的不仅仅只是TextBox(3.5 sp1 可以把错误信息转嫁)</span></pre>
<p>wpf内置验证的做法,自定义<strong>ValidationRule</strong></p>
<p><strong><a href="http://www.cnblogs.com/images/cnblogs_com/Clingingboy/WindowsLiveWriter/9f2f1c7dd2fa_DD4A/error1_2.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="31" alt="error1" src="http://www.cnblogs.com/images/cnblogs_com/Clingingboy/WindowsLiveWriter/9f2f1c7dd2fa_DD4A/error1_thumb.jpg" width="86" border="0"></a> </strong></p>
<p>(2)若使用了内置验证做法,控件的验证将会失效</p>
<p>&nbsp;</p>
<p><strong>四.两个属性以上的验证</strong></p>
<p><strong></strong>&nbsp;</p>
<p><strong>(1)单一的元数据标签无法做到，需要写额外的方法进行验证</strong></p>
<p><strong></strong>&nbsp;</p>
<p><strong>(2)使用HasSelfValidation元数据标签验证对象</strong></p><pre class="code">[<span style="color: #2b91af">HasSelfValidation</span>]
<span style="color: blue">public class </span><span style="color: #2b91af">Person2 </span>: <span style="color: #2b91af">INotifyPropertyChanged
</span>{
}</pre>
<p><strong>(3)添加验证方法</strong></p><pre class="code">[<span style="color: #2b91af">SelfValidation</span>(Ruleset = <span style="color: #a31515">"Default"</span>)]
<span style="color: blue">public void </span>ValidateDefault(<span style="color: #2b91af">ValidationResults </span>results)
{

}</pre>
<p><strong>(4)针对特定属性来验证</strong></p>
<p>(4)-1 实行<strong>IPropertyChangedName</strong>接口,根据进来的属性进行判断,可以填写多个方法用于区分</p><pre class="code">[<span style="color: #2b91af">SelfValidation</span>(Ruleset = <span style="color: #a31515">"Default"</span>)]
<span style="color: blue">public void </span>ValidateDefault(<span style="color: #2b91af">ValidationResults </span>results)
{
    <span style="color: blue">switch </span>(<span style="color: blue">this</span>.PropertyChangedName)
    {
        <span style="color: blue">case </span><span style="color: #a31515">"FirstName"</span>:

            <span style="color: blue">break</span>;
    }
}</pre><a href="http://11011.net/software/vspaste"></a><pre class="code">&nbsp;</pre><pre class="code">[<span style="color: #2b91af">SelfValidation</span>(Ruleset = <span style="color: #a31515">"Default"</span>)]
<span style="color: blue">public void </span>ValidateDefault(<span style="color: #2b91af">ValidationResults </span>results)
{
    <span style="color: blue">switch </span>(<span style="color: blue">this</span>.PropertyChangedName)
    {
        <span style="color: blue">case </span><span style="color: #a31515">"LastName"</span>:

            <span style="color: blue">break</span>;
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a>(5)前端控件指定</p><img src ="http://www.cnblogs.com/Clingingboy/aggbug/1274934.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43791/" target="_blank">[新闻]雅虎新任CEO两大人选基本锁定</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Windows Presentation Foundation(wpf) FAQ</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/07/06/1236952.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Sun, 06 Jul 2008 10:26:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/07/06/1236952.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1236952.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/07/06/1236952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1236952.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1236952.html</trackback:ping><description><![CDATA[摘要:  这个帖子在微软官方的wpf讨论区http://forums.msdn.microsoft.com/en-US/wpf/thread/a2988ae8-e7b8-4a62-a34f-b851aaf13886，索性这个帖子是以前在我们博客园的同志sheva发的,不知道为何他建了一个新的bloghttp://shevaspace.blogspot.com/,不知道因为这篇blog的原因http://w&nbsp;&nbsp;<a href='http://www.cnblogs.com/Clingingboy/archive/2008/07/06/1236952.html'>阅读全文</a><img src ="http://www.cnblogs.com/Clingingboy/aggbug/1236952.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43788/" target="_blank">[新闻]成龙谈创办汽车网站：不让我的受骗经历重演</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>wpf控件开发基础(1)</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/07/03/wpfcustomcontrolpart-1.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Thu, 03 Jul 2008 13:44:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/07/03/wpfcustomcontrolpart-1.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1235081.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/07/03/wpfcustomcontrolpart-1.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1235081.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1235081.html</trackback:ping><description><![CDATA[摘要: 本文介绍了wpf控件中ContentPresenter的使用&nbsp;&nbsp;<a href='http://www.cnblogs.com/Clingingboy/archive/2008/07/03/wpfcustomcontrolpart-1.html'>阅读全文</a><img src ="http://www.cnblogs.com/Clingingboy/aggbug/1235081.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43787/" target="_blank">[新闻]微软高管解密Windows7内幕：大量功能中国造</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>wpf/silverlight文章推荐</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/07/01/1233650.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Tue, 01 Jul 2008 15:57:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/07/01/1233650.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1233650.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/07/01/1233650.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1233650.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1233650.html</trackback:ping><description><![CDATA[摘要: 还是wpf文件推荐:)&nbsp;&nbsp;<a href='http://www.cnblogs.com/Clingingboy/archive/2008/07/01/1233650.html'>阅读全文</a><img src ="http://www.cnblogs.com/Clingingboy/aggbug/1233650.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43786/" target="_blank">[新闻]Vista SP2 beta 具体更新的清单</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>wpf/silverlight文章推荐阅读</title><link>http://www.cnblogs.com/Clingingboy/archive/2008/06/25/1230047.html</link><dc:creator>Clingingboy</dc:creator><author>Clingingboy</author><pubDate>Wed, 25 Jun 2008 15:33:00 GMT</pubDate><guid>http://www.cnblogs.com/Clingingboy/archive/2008/06/25/1230047.html</guid><wfw:comment>http://www.cnblogs.com/Clingingboy/comments/1230047.html</wfw:comment><comments>http://www.cnblogs.com/Clingingboy/archive/2008/06/25/1230047.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/Clingingboy/comments/commentRss/1230047.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Clingingboy/services/trackbacks/1230047.html</trackback:ping><description><![CDATA[摘要: 推荐一些wpf和silverlight的文章给大家阅读:)&nbsp;&nbsp;<a href='http://www.cnblogs.com/Clingingboy/archive/2008/06/25/1230047.html'>阅读全文</a><img src ="http://www.cnblogs.com/Clingingboy/aggbug/1230047.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43785/" target="_blank">[新闻]纽约时报：Twitter为何拒绝Facebook收购</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>