- RadComboBox in a RadWindow
- RadComboBox bind to a viewmodel's property, which type is Guid?
- The viewmodel implement IDataErrorInfo
- Set the RadComboBox's IsEditable to true,
When chose a item from the RadCombox and the property's value from null to a Guid value, viewmodel then validate and add a data errorinfo to IDataErrorInfo(the business logical doesn't allow the property value not null), will cause HRESULT E_FAIL
at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
at MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, Boolean b)
at System.Windows.DependencyObject.SetValue(DependencyProperty property, Boolean b)
at System.Windows.Controls.ToolTip.OpenPopup()
at System.Windows.Controls.ToolTip.OnIsOpenChanged(Boolean isOpen)
at System.Windows.Controls.ToolTip.OnIsOpenPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isBindingInStyleSetter)
at System.Windows.DependencyObject.SetValue(DependencyProperty property, Boolean b)
at System.Windows.Controls.ToolTip.set_IsOpen(Boolean value)
at Telerik.Windows.Controls.Chromes.ValidationTooltip.UpdateTooltip()
at Telerik.Windows.Controls.Chromes.ValidationTooltip.OnApplyTemplate()
at System.Windows.FrameworkElement.OnApplyTemplate(IntPtr nativeTarget)
If set the RadComboBox's IsEditable to false, no exception happen.
10 Answers, 1 is accepted
##XAML
<
telerik:RadComboBox
VerticalAlignment
=
"Center"
Width
=
"250"
Text="{Binding Value,
Mode
=
TwoWay
,
ValidatesOnExceptions
=
True
,
ValidatesOnNotifyDataErrors
=
True
,
NotifyOnValidationError
=
True
,
UpdateSourceTrigger
=
PropertyChanged
}"
ItemsSource
=
"{Binding PossibleValues}"
ClearSelectionButtonContent
=
"True"
ClearSelectionButtonVisibility
=
"Collapsed"
CanAutocompleteSelectItems
=
"True"
CanKeyboardNavigationSelectItems
=
"True"
IsEditable
=
"True"
IsReadOnly
=
"False"
OpenDropDownOnFocus
=
"False"
IsFilteringEnabled
=
"False"
/>
<telerik:Office_BlueTheme x:Key="AppTheme" />
<Style TargetType="CheckBox" telerik:StyleManager.BasedOn="{StaticResource AppTheme}"/>
I guess telerik silverlight RadControls's validation error tip popup cause those exception.
As you can see in this PITS item the issue was recently fixed and the fix is available in the Latest Internal Build from yesterday.
It would be great If you can check it out and If you are still experiencing the issue, please don't hesitate to contact us.
Greetings,
Georgi
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>
в MS.Internal.XcpImports.CheckHResult(UInt32 hr)
в MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, Boolean b)
в System.Windows.DependencyObject.SetValue(DependencyProperty property, Boolean b)
в System.Windows.Controls.Primitives.Popup.set_IsOpen(Boolean value)
в System.Windows.Controls.ToolTip.OpenPopup()
в System.Windows.Controls.ToolTip.OnIsOpenChanged(Boolean isOpen)
в System.Windows.Controls.ToolTip.OnIsOpenPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
в System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
в System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
в System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet, Boolean isBindingInStyleSetter)
в System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value)
в System.Windows.DependencyObject.SetValue(DependencyProperty property, Boolean b)
в System.Windows.Controls.ToolTip.set_IsOpen(Boolean value)
в Telerik.Windows.Controls.Chromes.ValidationTooltip.UpdateTooltip()
в Telerik.Windows.Controls.Chromes.ValidationTooltip.OnApplyTemplate()
в System.Windows.FrameworkElement.OnApplyTemplate(IntPtr nativeTarget)
Can you give us more details about your scenario?
It would be great if you can put together a simple project reproducing the issue.
So any information would be appreciated.
Regards,
Georgi
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>
I am experiencing exactly the same issue as Kairat above, and am receiving the same error message and stack trace, using the same internal build of RadControls for Silverlight 5.
For my scenario, I have been able to narrow the cause down to a RadComboBox within a RadWindow. If an invalid value is entered and the validation notification needs to be displayed, the COM exception is thrown.
I have tested the same scenario (RadComboBox with validation error) without a RadWindow, and that does not throw the same exception. I have included the code from a sample project that will demonstrate the behaviour below:
MainPage.xaml
<
UserControl
x:Class
=
"SilverlightApplication3.MainPage"
xmlns:SilverlightApplication3
=
"clr-namespace:SilverlightApplication3"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
mc:Ignorable
=
"d"
d:DesignHeight
=
"300"
d:DesignWidth
=
"400"
>
<
UserControl.DataContext
>
<
SilverlightApplication3:ViewModel
/>
</
UserControl.DataContext
>
<
Grid
x:Name
=
"LayoutRoot"
Background
=
"White"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"Auto"
/>
</
Grid.RowDefinitions
>
<
telerik:RadComboBox
Height
=
"23"
Grid.Row
=
"0"
Margin
=
"10"
Width
=
"120"
ItemsSource
=
"{Binding Items}"
SelectedItem
=
"{Binding Value, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"
/>
<
Button
Grid.Row
=
"1"
Content
=
"Open Window"
Click
=
"Button_Click"
Width
=
"100"
/>
</
Grid
>
</
UserControl
>
MainPage.xaml.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
namespace
SilverlightApplication3
{
public
partial
class
MainPage : UserControl
{
public
MainPage()
{
InitializeComponent();
}
private
void
Button_Click(
object
sender, RoutedEventArgs e)
{
ChildWindowTest widnow =
new
ChildWindowTest();
widnow.ShowDialog();
}
}
}
ChildWindowTest.xaml
<
telerik:RadWindow
x:Class
=
"SilverlightApplication3.ChildWindowTest"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
xmlns:SilverlightApplication3
=
"clr-namespace:SilverlightApplication3"
Header
=
"ChildWindowTest"
Height
=
"300"
Width
=
"300"
>
<
telerik:RadWindow.DataContext
>
<
SilverlightApplication3:ChildWindowViewModel
/>
</
telerik:RadWindow.DataContext
>
<
Grid
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"Auto"
/>
</
Grid.RowDefinitions
>
<
telerik:RadComboBox
Height
=
"23"
Grid.Row
=
"0"
Margin
=
"10"
Width
=
"120"
ItemsSource
=
"{Binding Items}"
SelectedItem
=
"{Binding Value, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"
/>
</
Grid
>
</
telerik:RadWindow
>
ViewModels.cs
using
System;
using
System.Collections.ObjectModel;
using
System.ComponentModel;
using
System.ComponentModel.DataAnnotations;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Ink;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
namespace
SilverlightApplication3
{
public
class
ViewModel : INotifyPropertyChanged
{
private
string
item;
[Required]
public
string
Value
{
get
{
return
item; }
set
{
Validator.ValidateProperty(value,
new
ValidationContext(
this
,
null
,
null
) { MemberName =
"Value"
});
if
(item != value)
{
item = value;
RaisePropertyChanged(
"Value"
);
}
}
}
public
ObservableCollection<
string
> Items {
get
;
private
set
; }
public
ViewModel()
{
Items =
new
ObservableCollection<
string
>(
new
[] {
"Item 1"
,
"Item 2"
,
"Item 3"
});
}
protected
void
RaisePropertyChanged(
string
propertyName)
{
if
(PropertyChanged !=
null
)
PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
public
event
PropertyChangedEventHandler PropertyChanged;
}
public
class
ChildWindowViewModel : INotifyPropertyChanged
{
private
string
item;
[Required]
public
string
Value
{
get
{
return
item; }
set
{
Validator.ValidateProperty(value,
new
ValidationContext(
this
,
null
,
null
) { MemberName =
"Value"
});
if
(item != value)
{
item = value;
RaisePropertyChanged(
"Value"
);
}
}
}
public
ObservableCollection<
string
> Items {
get
;
private
set
; }
public
ChildWindowViewModel()
{
Items =
new
ObservableCollection<
string
>(
new
[] {
"Item 1"
,
"Item 2"
,
"Item 3"
});
}
protected
void
RaisePropertyChanged(
string
propertyName)
{
if
(PropertyChanged !=
null
)
PropertyChanged(
this
,
new
PropertyChangedEventArgs(propertyName));
}
public
event
PropertyChangedEventHandler PropertyChanged;
}
}
Using the above code, you should see that the RadComboBox on the main page validates correctly when cleared (i.e. show the validation tooltip, etc). Clicking on the 'Open Window' button will display a child window with another RadComboBox on it. This RadComboBox does not validate correctly when cleared; it instead throws a COM exception.
Looking forward to hearing from you soon.
We were able to reproduce the issue even with the latest assembles, but the good news is that we have find out the additional problem and it should be fix for the next internal build, which is scheduled for the next Monday. We have also updated our PITS issue on the matter where you can also track if the issue is fixed.
Regards,
Georgi
the Telerik team
Explore the entire Telerik portfolio by downloading Telerik DevCraft Ultimate.
Why not keep same style as native ?
I'm also experiencing this issue as well however mine is with a radmaskedtextbox hosted within a rad window. I get the same errror when i raise a validation exception when the lenghth of the phone isn't 10 characters. Our whole App just crashes.
here's my code:
XAML:
<telerikInput:RadComboBox x:Name="rcbPhone2" VerticalAlignment="Center" Margin="0 5 5 5" IsEditable="True" IsTextSearchEnabled="True" IsEnabled="{Binding IsInEditMode}" telerik2:TextSearch.TextPath="DescriptionFormatted" SelectedValue="{Binding Phone2DescID, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}" SelectedValuePath="ID" ItemsSource="{Binding Phones}" IsReadOnly="True" Width="100">
ViewModel:
Private _Phone2 As String Public Property Phone2 As String Get Return _Phone2 End Get Set(ByVal value As String) If (value Is Nothing OrElse value.Length = 0 OrElse Regex.IsMatch(value, "(?sm)^(\d{10})$")) Then SetValue(_Phone2, value, "Phone2") _Phone2 = value Me.OnPropertyChanged("Phone2") compareValue() Else Throw New ValidationException("The Phone field must have a length of 10 characters.") End If End Set End Property
As you can see in the PITS item, the issue was fixed and the fix is available in Q2 2012 SP. Could you, please give it a try and let us know if everything works ok?
Kind regards,
Georgi
the Telerik team
Explore the entire Telerik portfolio by downloading Telerik DevCraft Ultimate.