UserControl не показывает исключение проверки в Silverlight - PullRequest
1 голос
/ 15 сентября 2011

У меня есть пользовательский элемент управления, и я связал его свойство зависимости TextValue с моделью представления RightSpecGlassStrength

Код UserControl

<UserControl x:Class="NumericUpDown1"
    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"
    mc:Ignorable="d"
    d:DesignHeight="25" d:DesignWidth="70">
    <StackPanel Orientation="Horizontal" VerticalAlignment="Top" >
        <TextBox x:Name="InputTextBox" Grid.Row="0" Grid.Column="0" Grid.RowSpan="1"
                 Style="{StaticResource NumericUpDownTextBoxStyle}"
                 KeyDown="InputTextBox_KeyDown" 
                 KeyUp="InputTextBox_KeyUp"
                 GotFocus="InputTextBox_GotFocus" 
                 LostFocus="InputTextBox_LostFocus"  
                 MouseWheel="InputTextBox_MouseWheel"
                 MouseEnter="InputTextBox_MouseEnter"
                 TextInputStart="InputTextBox_TextInputStart"
                 LayoutUpdated="InputTextBox_LayoutUpdated"
                 />
    </StackPanel>

</UserControl>

ViewItems.Xaml

  <userControl:NumericUpDown1 x:Name="RightSpecGlassStrengthUpDown" Maximum="28" Minimum="-28" Step="0.25"  TextValue="{Binding RightSpecGlassStrength, Mode=TwoWay, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" TabIndex="5"   />

ViewItemsViewModel.cs

  public class ViewItemsViewModel : EntityViewModel
{

    #region constructor
    public ViewItemsViewModel(){}
    #endregion

    #region properties


    private Double rightSpecGlassStrength;
    public Double RightSpecGlassStrength
    {
        get
        {
            return rightSpecGlassStrength;
        }
        set
        {
            rightSpecGlassStrength=value;
            ValidateStrengths("RightSpecGlassStrength", RightSpecGlassStrength);
            PropertyChangedHandler("RightSpecGlassStrength");
        }
    }

    private void ValidateStrengths(string propertyName1, double RightSpecGlassStrength)
    {
        ClearErrorFromProperty(propertyName1);
        if (RightSpecGlassStrength == 0)
            AddErrorForProperty(propertyName1, "Value can not be 0");
    }


    #endregion
}

My EntityViewModel.cs реализует интерфейс INotifyDataErrorInfo и наследует ViewModelBase класс

 public class EntityViewModel : ViewModelBase, INotifyDataErrorInfo
    {
      }

ViewModelBase.cs реализует INotifyPropertyChanged

 public class ViewModelBase : INotifyPropertyChanged
    {
}

Мой код работает нормально, когда я связываю текстовое поле или другой элемент управления silverlight с моделью представления.и показывает правильное исключение проверки на элементе управления.

Но когда пользовательский элемент управления получает исключение для проверки, оно не показывает никаких исключений.

Я не понимаю, что не так с пользовательским элементом управления .???

1 Ответ

0 голосов
/ 11 октября 2011

Трудно полностью отладить проблему без кода для пользовательского элемента управления, однако мне кажется, что у вас есть свойство зависимости от кода, например:

public static DependencyProperty TextValueProperty = DependencyProperty.Register("TextValue", typeof(string), typeof(NumericUpDown1), null)

Тогда вам кажетсяиспользовать события TextInputStart, KeyDown, KeyUp для захвата изменений базового элемента управления.Я догадываюсь, что либо: a) Вам не удалось обновить свойство TextValue до нового значения.б) Ваш код мешает процессу валидации.

Я бы предложил, чтобы вместо кода позади вы указали пользовательский элемент управления в xaml;то есть

<UserControl x:Class="NumericUpDown1" x:Name="View"> ... </UserControl>

Затем привяжите текстовое значение лежащего в основе TextBox непосредственно к свойству зависимости, например так:

<TextBox Text="{Binding ElementName=View, Path=TextValue, Mode=TwoWay, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" ... />

Это должно позволить механизму валидации работать как обычно.1012 *

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...