. Моя проблема довольно проста в воспроизведении. Я создал проект с нуля с помощью модели представления. Как вы можете видеть в настройщике свойства «Возраст», у меня есть простая логика.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