返回首页

|:在运行中的Silverlight DataGrid的条件控制{A}{A2的} 介绍
大多数业务应用程序执行Silverlight和DataGrid中的每个场景带有自身的并发症,有时看起来很滑稽,但具有挑战性。我写这篇文章后,得到了类似的情况卡住。在这篇文章中,我们将讨论有关提供各种控件绑定的方法,不同的细胞内特定列的DataGrid使用IValueconvertor,有点常识应用。发行/方案
我们的应用程序需要数将超过网格中显示的记录......最简单的事情,我们可以做的,甚至睡觉时。但挑战在于显示不同的一套基于业务规则的控制。让我澄清一个例子。
我们拥有一套以上电网需要显示的客户名单。客户对象包含属性被称为情绪,要么可以快乐,中立或愤怒的情绪。好了,它不会停止在这里。如果心情是不可用,细胞必须显示quot; NAquot;如果属性是空的,那么它应该显示HyperLinkbutton这反过来将请求发送到特定的客户寻求反馈。可以看到一个特定的控制原型如下:
{A3的}
,所以电网必须足够聪明,或者使用与NA或Button控件与它自己的代码背后的逻辑控制图像或简单的文本块控制。每行的数据绑定将决定控制在运行时的特定列。我的下一个部分将侧重于不同的方法和网格定制的一些基本概念。解决这一问题和一些基本的DataGrid
DataGrid的多种列类型,它可以是一个:DataGridTextColumn:纯文本值DataGridCheckBoxColumn:布尔值DataGridTemplateColumn:综合控件(绑定控件)
关于这些列类型和使用的情况下简短很好地描述了{A4纸}。一旦我们选择自定义ColumnType,我们可以使用任何一个单元模板,将持有的数据绑定控件。使用自定义列,我们应该强制DataGrid来停止自动生成列,相反,我们可以定义我们的列指定为绑定属性。下图显示了一个自定义列的DataGrid。
{S}
DataGrid的属性,让我们来显示数据,而细胞是不是在编辑模式。
{A6的}
在这里,在这个岗位,我们将集中于显示的数据,所以我们的重点将放在CellTemplete。
为解决上述问题的同时,我们认为各种选项,如动态的DataTemplate({A7的})WPF的支持,但不是Silverlight。 DataTemplateSelector允许使用特定的模板,基于数据对象的逻辑。然后,我还以为可以修改XAML的DataTemplate在后面的代码创建和附加到细胞的模板,虽然我们保持它作为最后的选择。我们在运行时寻找控制,可容纳在运行时定义的任何控制和选择控制决定使用Ivalueconvertor根据特定的业务对象。
{A8的}? ContentControl的基本上是一种控制,其控制属性可以在Silverlight UIElement的任何。
,所以最好为给定的情况下出现的解决办法是使用里面的DataTemplate的ContentControl分配使用IvalueConvertor在运行时所需的自定义控制。在下一节,我们会考虑实施。设置网格和绑定
该页面包含一个网格,将显示的的客户data.The客户业务实体对象以某种方式定义如下所述:

namespace GridInSilverlight 

{ 

  public  enum Mood

    {

        NA,

        Satisfied,

        Normal,

        UnSatisfied,

        UA

    }

  

    public class Customer

   {

        public string Name{get;set;}

        public string Place { get; set; }

        public string  Phone{get;set;}

        public bool IsCorporate{get;set;}

        public Mood CustomerMood { get; set; }

    }

}

上述实体的网格定义如下:{C}
考虑最后一列:
{S3的}
兑换这里是在控制的资源,增加一条,作为被定义,这将反过来将用于显示值的UIElement。下一步是创建一个显示情绪的转换器。转换器的方法,允许你修改的数据结合的过程。转换器的方法,通过控制从{A9的}继承。
这个特定项目的兑换代码是:
public class MoodConvertor:IValueConverter

   {

       #region IValueConverter Members

 

       public object Convert(object value, Type targetType, 

		object parameter, System.Globalization.CultureInfo culture)

       { 

           Customer cusObj = value as Customer;

           Image img = new Image();

           switch (cusObj.CustomerMood)

           { 

               case Mood.Normal:

 

                       img.Source = new System.Windows.Media.Imaging.BitmapImage

					(new Uri("Normal.png", UriKind.Relative));

                   return img;

 

               case Mood.Satisfied:

 

                   img.Source = new System.Windows.Media.Imaging.BitmapImage

				(new Uri("Satisfied.png", UriKind.Relative));

                   return img;

 

               case Mood.UnSatisfied:

                   img.Source = new System.Windows.Media.Imaging.BitmapImage

				(new Uri("UnSatisfied.png", UriKind.Relative));

                   return img;

 

               case Mood.UA:

                   HyperlinkButton btn = new HyperlinkButton();

                   btn.Content = "Invite Suggestion";

                   return btn;

 

               default :

                   TextBlock tbU = new TextBlock();

                   tbU.Text = "-";

                   return tbU;

           } 

       }

 

       public object ConvertBack(object value, Type targetType, 

		object parameter, System.Globalization.CultureInfo culture)

       {

           throw new NotImplementedException();

       }

 

       #endregion

   } 

几行代码生成虚拟客户数据,为您的情况下,它可以是从您的服务调用的数据。在编制项目,电网是正是我们需要的:
{A10的}最后几个字??
上述工作是定制的DataGrid的例子之一。随着DataGridTemplateColumn CellTemplete可用于进一步定制。希望这篇文章将帮助您了解网格概念和定制概念。 Silverlight提供的灵活性,是惊人的,XAML是肯定微软的焦点中心的资格。让我知道你的意见{五}。

回答

评论会员:游客 时间:2012/02/04
Manas_Patnaik:你好alshameer{BR}如果你想改变在运行时的心情,然后,你为什么不实现一个组合框使用CellEditTemplete。,玛纳斯温•帕特纳伊克www.manaspatnaik.com/博客Twitter的-@manas_patnaik修改,8月29日(星期一),201112:53
pgmckillop
评论会员:游客 时间:2012/02/04
明确和简洁。非常有用,我是解决一个特定问题。感谢您的努力
Manas_Patnaik
评论会员:游客 时间:2012/02/04
感谢{六},玛纳斯温•帕特纳伊克www.manaspatnaik.com/博客Twitter的-@manas_patnaik