2015-01-15 5 views
2

. Моя проблема довольно проста в воспроизведении. Я создал проект с нуля с помощью модели представления. Как вы можете видеть в настройщике свойства «Возраст», у меня есть простая логика.Silverlight 5 привязка к свойству с логикой в ​​его сеттере не работает должным образом при подключении отладки.

public class MainViewModel : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     private int age; 

     public int Age 
     { 
      get 
      { 
       return age; 
      } 
      set 
      { 
       /*Age has to be over 18* - a simple condition in the setter*/ 
       age = value; 
       if(age <= 18) 
        age = 18; 

       OnPropertyChanged("Age"); 
      } 
     } 

     public MainViewModel(int age) 
     { 
      this.Age = age; 
     } 

     private void OnPropertyChanged(string propertyName) 
     { 
      if (this.PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
    } 

В MainPage.xaml

<Grid x:Name="LayoutRoot" Background="White"> 
     <TextBox 
      Text="{Binding Path=Age, Mode=TwoWay}" 
      HorizontalAlignment="Left" 
      Width="100" 
      Height="25"/> 
     <TextBlock 
      Text="{Binding Path=Age, Mode=OneWay}" 
      HorizontalAlignment="Right" 
      Width="100" 
      Height="25"/> 

    </Grid> 

И MainPage.xaml.cs я просто инстанцируете модель представления и установить его в качестве DataContext.

public partial class MainPage : UserControl 
{ 
    private MainViewModel mvm; 

    public MainPage() 
    { 
     InitializeComponent(); 

     mvm = new MainViewModel(20); 
     this.DataContext = mvm; 
    } 
} 

Я ожидаю, что этот код будет ограничивать установить Возраст до 18 лет, если введенное значение в TextBox ниже 18. Сценарий: Вставьте в TextBox значение «5» и нажмите вкладку (привязки вступают в силу, TextBox должен потерять фокус)

Дело 1: Отладчик подключен => Значение TextBox будет «5», а значение TextBlock будет «18», как ожидалось. - НЕПРАВИЛЬНО

Случай 2: Отладчик не прилагается значение => TextBox будет «18» и значение TextBlock будет «18» - ПРАВИЛЬНОЕ

кажется, что, когда присоединен отладчик связывания не работает ожидаемый на объекте, вызвавшем обновление значения свойства. Это происходит только в том случае, если свойство, к которому мы привязываем, имеет некоторую логику в сеттер или getter.

Что-то изменилось в SL5, и логика в сеттерах больше не разрешена?

Конфигурация: VisualStudio 2010 SP1 SL 5 Инструменты 5.1.30214.0 SL5 SDK 5.0.61118.0 IE 10

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^