silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight实战示例总结(兼对Object类型绑定的处理)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在前面的博文中,如果要能进行修改,都是用strValue进行绑定的,但这只说明String类型的在datagrid自动生成的列中是可以编辑的,用Object进行绑定一样也可以编辑,但需要进行一定的处理,而且用strvalue,intvalue分别绑定也不符合开发友好原则,我在示例中有Object属性,而且也进行了通知属性处理,这里我们利用一个convert来处理object类型的绑定,根据字段自带
@H_403_6@在前面的博文中,如果要能进行修改,都是用strValue进行绑定的,但这只说明String类型的在datagrid自动生成的列中是可以编辑的,用Object进行绑定一样也可以编辑,但需要进行一定的处理,而且用strvalue,intvalue分别绑定也不符合开发友好原则,我在示例中有Object属性,而且也进行了通知属性处理,这里我们利用一个convert来处理object类型的绑定,根据字段自带的数据类型,其实我们可以做得很通用化。下面是代码(其它代码见示例):

@H_403_6@1)ObjectAutoConverter.cs 用于值的转换,在这里可以进行数据类型转换和格式化。不过我处理的比较简单。

@H_403_6@/// <sumMary>
    /// 双向 IValueConverter,使您可以将可绑定对象的属性(可以为空 String 值)绑定到依赖属性(在该情况下应设置为 null)。
    /// </sumMary>
    public class ObjectAutoConverter : IValueConverter
    {
        /// <sumMary>
        /// 将 <c>null</c> 或空 Strings 转换为 <c>null</c>。
        /// </sumMary>
        /// <param name="value">要转换的值。</param>
        /// <param name="targetType">预期结果 type (已忽略)。</param>
        /// <param name="parameter">可选参数(已忽略)。</param>
        /// <param name="culture">转换的区域性(已忽略)。</param>
        /// <returns>如果 <paramref name="value"/> 为 <c>null</c> 或为空,则此方法返回 <c>null</c>,否则返回 <paramref name="value"/>。</returns>
        public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culturE)
        {
            String strValue = value as String;
            if (targetType == typeof(int))
            {
                return String.IsNullOrEmpty(strvalue) ? 0 : int.Parse(value.ToString());
            }
            return String.IsNullOrEmpty(strvalue) ? null : value.ToString();
        }

@H_403_6@        /// <sumMary>
        /// 将 <c>null</c> 转换回 <see cref="String.Empty"/>。
        /// </sumMary>
        /// <param name="value">要转换的值。</param>
        /// <param name="targetType">预期结果类型(已忽略)。</param>
        /// <param name="parameter">可选参数(已忽略)。</param>
        /// <param name="culture">转换的区域性(已忽略)。</param>
        /// <returns>如果 <paramref name="value"/> 为 <c>null</c>,则它返回 <see cref="String.Empty"/>,否则返回 <paramref name="value"/>。</returns>
        public object ConvertBACk(object value,System.Globalization.CultureInfo culturE)
        {
            if (targetType == typeof(String))
            {
                return value ?? String.Empty;
            }
            return value.ToString();
        }
    }

@H_403_6@2)页面绑定部分示例

@H_403_6@<UserControl.resources>
           <local:ObjectAutoConverter x:Key="objectAutoConverter"/>
    </UserControl.resources>
    <Grid x:Name="LayoutRoot" BACkground="White">
        <Grid.RowDeFinitions>
            <RowDeFinition />
            <RowDeFinition />
            <RowDeFinition />
        </Grid.RowDeFinitions>
       
        <sdk:DataGrid x:Name="CustomGrid" Itemssource="{Binding Path=DataTable.Rows}" Grid.Row="0" AutoGeneratecolumns="false" >
            <sdk:DataGrid.columns>
                <sdk:DataGridTextcolumn CanUserReorder="True" Binding="{Binding Path=[employeEID].Value,Mode=TwoWay}" CanUserResize="True" CanUserSort="True" Width="Auto" />
                <sdk:DataGridTextcolumn CanUserReorder="True" Binding="{Binding Path=[employeename].StrValue,Mode=TwoWay}" CanUserResize="True" CanUserSort="True" Width="Auto" />
                <sdk:DataGridTextcolumn CanUserReorder="True" Binding="{Binding Path=[employeeDesc].Value,Mode=TwoWay,Converter={Staticresource objectAutoConverter}}" IsReadOnly="false" CanUserResize="True" CanUserSort="True" Width="Auto" />
                <sdk:DataGridTextcolumn CanUserReorder="True" Binding="{Binding Path=[employeeAge].Value,Mode=TwoWay}" CanUserResize="True" CanUserSort="True" Width="Auto" />
            </sdk:DataGrid.columns>
        </sdk:DataGrid>
        <Button Content="查询" Command="{Binding Path=Commands[Button1Command]}" CommandParameter="{Binding ElementName=CustomGrid,Path=SELEctedItem}"  Grid.Row="1" Height="23" HorizontalAlignment="Left"  Margin="157,14,0" Name="修改" VerticalAlignment="Center" Width="143"/>
      </Grid>

@H_403_6@注意黑体字部分。

@H_403_6@总结:

@H_403_6@到这里为止,这个示例就全部完成了,然看起来使用价值不大(对于动态查询,复杂查询还是有相当大的好处),但如果稍稍进行改装,特别是结合实体框架博文中的更新,修改删除自动处理(对单表)就非常有实用价值了,绝对比dotnet的Dataset结合Command来得简单而实用。有如下好处:
A)可以减少实体层,数据访问层,逻辑层,ria服务层以及客户端得模型层;
B)中间只需要一个Domainservice,而且该服务还很简单.\
但不好的地方是这种开发测试比较困难,不便于查找错误等。

@H_403_6@这个示例基本涵盖了silverlight开发从底层到UI的各个方面(底层架构,服务处理,客户端模型,VM,V,一般绑定,索引器绑定,数据转换等),对于初学者来说还是非常实用的。如果真正的按示例自己做一篇绝对收获颇多。有一定基础后,可以看一下我写的关于依赖属性,附加属性triggers,Behaviors方面的文章,对于深入了解silverlight,wpf有一定的好处。对于UI开发中的自定义控件,动画,窗口拖动等,我也在研究中,现在正在做@L_120_7@mDI,ModeWindow的模拟。对于桌面级开发,微软目前提供的还有些距离。(不过现在的自定义控件还是很简单的,微软把这个问题简化了非常多)

@H_403_6@希望这个实例对大家有所帮助!

大佬总结

以上是大佬教程为你收集整理的Silverlight实战示例总结(兼对Object类型绑定的处理)全部内容,希望文章能够帮你解决Silverlight实战示例总结(兼对Object类型绑定的处理)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。