Silverlight:telerik RadControls中RadGridView的一个Bug及解决办法(转载)

Silverlight:telerik RadControls中RadGridView的一个Bug及解决办法(转载)当RadGridView中嵌套RadComboBox,且RadGridView的高度不够出现滚动条时,上下拉动滚动条后,RadComboBox中的选中值将丢失!  如下图:  滚动条未拖动前    滚动条上下拖动后(注意下图的高亮部分)    重现该Bug的测试代码:  Model层  TextValueObject.csnamespac…

大家好,又见面了,我是你们的朋友全栈君。

当RadGridView中嵌套RadComboBox,且RadGridView的高度不够出现滚动条时,上下拉动滚动条后,RadComboBox中的选中值将丢失!

  如下图:

  滚动条未拖动前

  


Silverlight:telerik RadControls中RadGridView的一个Bug及解决办法(转载)

 

  滚动条上下拖动后(注意下图的高亮部分)

  


Silverlight:telerik RadControls中RadGridView的一个Bug及解决办法(转载)

 

  重现该Bug的测试代码:

  Model层

  TextValueObject.cs

namespace
RadControlsBug.Model
{
    
public
class
TextValueObject
    
{
        
public
string
Text {
set
;
get
; }
  
        
public
string
Value {
set
;
get
; }
    
}
}

  SexType.cs

namespace
RadControlsBug.Model
{
    
public
class
SexType
    
{
        
/// <summary>
        
/// 男
        
/// </summary>
        
public
static
string
Male =
"男"
;
  
        
/// <summary>
        
/// 女
        
/// </summary>
        
public
static
string
FeMale =
"女"
;
    
}
}

  SexTypeCollection.cs

using
System.Collections.Generic;
  
namespace
RadControlsBug.Model
{
    
public
static
class
SexTypeCollection
    
{
        
private
static
List<TextValueObject> _items =
new
List<TextValueObject>();
  
        
public
static
List<TextValueObject> Items
        
{
            
get
{
return
_items; }
            
set
{ _items = value; }
        
}
  
        
static
SexTypeCollection() 
        
{
            
_items.Add(
new
TextValueObject() { Text =
"男"
, Value = SexType.Male });
            
_items.Add(
new
TextValueObject() { Text =
"女"
, Value = SexType.FeMale });
        
}
    
}
}

  Person.cs

using
System.Collections.Generic;
  
namespace
RadControlsBug.Model
{
    
public
class
Person
    
{
        
public
string
Name {
set
;
get
; }
  
        
public
string
Sex {
set
;
get
; }
  
        
private 
List<TextValueObject> _sexItems = SexTypeCollection.Items;
  
        
public
List<TextValueObject> SexItems {
get
{
return
_sexItems; } }
  
    
}
}

  Company.cs

using
System.Collections.ObjectModel;
  
namespace
RadControlsBug.Model
{
    
public
class
Company
    
{
        
private
ObservableCollection<Person> _employees =
new
ObservableCollection<Person>();
  
        
public
ObservableCollection<Person> Employees
        
{
            
get
{
return
_employees; }
            
set
{ _employees = value; }
        
}
  
  
        
public
Company() 
        
{
            
this
._employees.Add(
new
Person() { Name =
"张三"
, Sex = SexType.Male });
            
this
._employees.Add(
new
Person() { Name =
"李四"
, Sex = SexType.FeMale });
            
this
._employees.Add(
new
Person() { Name =
"王五"
, Sex = SexType.Male });
            
this
._employees.Add(
new
Person() { Name =
"赵六"
, Sex = SexType.FeMale });
            
this
._employees.Add(
new
Person() { Name =
"孙七"
, Sex = SexType.Male });
            
this
._employees.Add(
new
Person() { Name =
"杨九"
, Sex = SexType.FeMale });
            
this
._employees.Add(
new
Person() { Name =
"胡十"
, Sex = SexType.Male });
        
}
  
    
}
}

  UI层:

  MainPage.Xaml:

<
UserControl
x:Class
=
"RadControlsBug.MainPage"
    
xmlns
=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    
xmlns:x
=
"http://schemas.microsoft.com/winfx/2006/xaml"
    
xmlns:d
=
"http://schemas.microsoft.com/expression/blend/2008"
    
xmlns:mc
=
"http://schemas.openxmlformats.org/markup-compatibility/2006"
    
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
    
mc:Ignorable
=
"d"
    
d:DesignHeight
=
"300"
d:DesignWidth
=
"400"
>
  
    
<
Grid
x:Name
=
"LayoutRoot"
Background
=
"White"
>
        
<
StackPanel
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Center"
>
            
<
telerik:RadGridView
ShowGroupPanel
=
"False"
RowIndicatorVisibility
=
"Collapsed"
CanUserFreezeColumns
=
"False"
AutoGenerateColumns
=
"False"
ItemsSource
=
"{Binding Employees,Mode=TwoWay}"
Width
=
"300"
Height
=
"120"
Name
=
"gridView1"
>
                
<
telerik:RadGridView.Columns
>
                    
<
telerik:GridViewColumn  
Header
=
"姓名"
Width
=
"80"
>
                        
<
telerik:GridViewColumn.CellTemplate
>
                            
<
DataTemplate
>
                                
<
telerik:RadMaskedTextBox
Value
=
"{Binding Name,Mode=TwoWay}"
MaskType
=
"None"
></
telerik:RadMaskedTextBox
>
                            
</
DataTemplate
>
                        
</
telerik:GridViewColumn.CellTemplate
>
                    
</
telerik:GridViewColumn
>
                    
<
telerik:GridViewColumn  
Header
=
"性别"
Width
=
"80"
>
                        
<
telerik:GridViewColumn.CellTemplate
>
                            
<
DataTemplate
>
                                
<
telerik:RadComboBox
ItemsSource
=
"{Binding SexItems,Mode=TwoWay}"
SelectedValue
=
"{Binding Sex,Mode=TwoWay}"
SelectedValuePath
=
"Value"
DisplayMemberPath
=
"Text"
/>
                                  
                            
</
DataTemplate
>
                        
</
telerik:GridViewColumn.CellTemplate
>
                    
</
telerik:GridViewColumn
>
                
</
telerik:RadGridView.Columns
>
            
</
telerik:RadGridView
>
             
        
</
StackPanel
>
    
</
Grid
>
</
UserControl
>

  MainPage.Xaml.cs:

using
System.Windows;
using
System.Windows.Controls;
using
RadControlsBug.Model;
  
namespace
RadControlsBug
{
    
public
partial
class
MainPage : UserControl
    
{
        
public
MainPage()
        
{
            
InitializeComponent();
  
            
this
.Loaded +=
new
RoutedEventHandler(Page_Loaded);
        
}
  
        
void
Page_Loaded(
object
sender, RoutedEventArgs e)
        
{
            
Company _viewModel =
new
Company();
            
this
.DataContext = _viewModel;
              
        
}
          
    
}
}

  该问题曾经困扰我长达2周之久,在Telerik的论坛上提问也未得到回复。

  曾经反复尝试,发现解决方法居然极其简单:

  <telerik:RadComboBox ItemsSource=”{Binding SexItems,Mode=TwoWay}” SelectedValue=”{Binding Sex,Mode=TwoWay}” SelectedValuePath=”Value” DisplayMemberPath=”Text”/>

  改成:

  <telerik:RadComboBox  SelectedValue=”{Binding Sex,Mode=TwoWay}” SelectedValuePath=”Value” DisplayMemberPath=”Text” ItemsSource=”{Binding SexItems,Mode=TwoWay}”/>

  后,问题奇迹般的解决了!

  分享于此,希望有助于遇到同样问题的朋友。(个人分析:有可能telerik的开发人员在解析XAML时,判断逻辑依赖于属性出现的顺序导致–胡猜的,我也没去看它的源码)

  最后谈一下我个人对于Telerik RadControls For Silverlight这套控件的感受,用这套控件做项目开发已经有近3个月的时间,总体感觉还不错,能大幅提高团队的开发效率,官方有详细文档和示例, 上手非常容易,而且客观来讲,BUG也比较少(用了3个月,基本上才发现这一个比较诡异的BUG),此外,如果是正版用户,官方还提供源码,并有一年的免 费升级期限,每季度官方均会对整套控件做一次升级(主要是修复之前的BUG,以及增加一些新功能)。 从成本上考虑,一套控件的售价9k RMB左右(无Licence数量限制,而且能拿到源码任意修改),国内用户可在慧都控件网上直接购买,对于公司来讲这个成本其实并不高(相比公司招人自 己实现这些控件的功能而言,9k多其实可以忽略不计了),如果您的公司打算致力于企业级应用的RIA开发,建议使用。

转载于:https://www.cnblogs.com/sandea/p/3289882.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161965.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 二叉树层次遍历算法——C/C++

    二叉树层次遍历算法——C/C++二叉树层序遍历1、算法思想用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。在进行层次遍历的时候,设置一个队列结构,遍历从二叉树的根节点开始,首先将根节点指针入队列,然后从队头取出一个元素,每取一个元素,执行下面两个操作:访问该元素所指向的节点若该元素所指节点的左右孩子节点非空,则将该元素所指节点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束…

  • 本地sql数据库怎么与远程sql数据库同步使用_sqlserver复制数据库

    本地sql数据库怎么与远程sql数据库同步使用_sqlserver复制数据库MySQL数据同步主要有三种方式:1.利用MySQL自身的数据库同步功能2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的3.利用专用的MySQL数据库同步软件1.利用MySQL自身的数据库同步功能(下面参考自网上的文章,写的非常详细了)MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能.数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件

    2022年10月15日
  • 零基础学Java(12)静态字段与静态方法

    零基础学Java(12)静态字段与静态方法静态字段与静态方法之前我们都定义的main方法都被标记了static修饰符,那到底是什么意思?下面我们来看看静态字段如果将一个字段定义为static,每个类只有一个这样的字段。而对于非静态的实例

  • request对象、response对象、session对象

    request对象、response对象、session对象仅仅是一些简单知识点的罗列,当做笔记,想具体学习的话,还是要找专业的书籍看看request对象作用:获取用户提供的信息语法:是实现了ServletRequest接口类的一个实例使用表单向服务器的某个JSP页面提交信息常用方法:设置编码方式:例如(用来防止汉字乱码)request.setCharacterEncoding(“gb2312”);同效果:Stringstr=r…

  • axisfaultexception_this alias is not available

    axisfaultexception_this alias is not available出现下面情况,可以是proxy.setEndpoint(endpoint);中endpoint没有给对导致AxisFault faultCode:{http://xml.apache.org/axis/}Server.NoService faultSubcode: faultString:TheAXISenginecouldnotfindatargetservicetoinvoke! targetServiceisGetPassword1 faultActor

  • python字符串中某个字符修改_Python实现字符串中某个字母的替代功能

    python字符串中某个字符修改_Python实现字符串中某个字母的替代功能今晚想实现这样一个功能:将输入字符串中的字母“i”变成字母“p”。当时想的很简单,直接用for循环遍历,然后替代,出问题的代码如下:name=input(‘随便输入一堆字符吧…’)#name=list(name)name=””.join(name)j=0foriinrange(len(name)):ifname[i]==’i’:name[i]=’p’j=…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号