В приложении WP8 у меня мало элементов управления, где я привязываю цвет переднего плана, который я изменяю в коде. Но OnPropertyChanged не срабатывает, когда произошло событие пользователя.Метод OnPropertyChanged не срабатывает
Я определил эту привязку «ControlForeground» в своем текстовом блоке и элементах управления шаблонами данных для радиообмена. Я пытаюсь изменить цвет переднего плана, когда пользователь нажимает кнопку. Но мое новое назначение цвета не обновляет пользовательский интерфейс. Что-нибудь я здесь не хватает?
В XAML
<TextBlock x:Name="lblTileColor" TextWrapping="Wrap" Text="Selected color:" Foreground="{Binding ControlForeground, Mode=TwoWay}"/>
<TextBlock x:Name="lblTileColor2" TextWrapping="Wrap" Text="App bg:" Foreground="{Binding ControlForeground, Mode=TwoWay}"/>
<RadioButton x:Name="accentColor" IsChecked="true" BorderBrush="White" Foreground="{Binding ControlForeground, Mode=TwoWay}">
<RadioButton.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Rectangle Width="25" Height="25" Fill="{StaticResource PhoneAccentBrush}"/>
<TextBlock Width="10"/>
<TextBlock x:Name="lblDefaultAccent" Text="Default accent color" Foreground="{Binding ControlForeground, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</RadioButton.ContentTemplate>
</RadioButton>
<Button x:name="UpdateColor" click="update_btn"/>
В C#,
public class ColorClass : INotifyPropertyChanged
{
private SolidColorBrush _ControlForeground;
public SolidColorBrush ControlForeground
{
get
{
return _ControlForeground;
}
set
{
_ControlForeground = value;
OnPropertyChanged("ControlForeground");
}
}
public ColorClass() { }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
public class ColorPage:PhoneApplicationPage{
public ObservableCollection<ColorClass> TestCollection { get; private set; }
public void update_btn(object sender, EventArgs e){
TestCollection.Add(new ColorClass()
{
ControlForeground = new SolidColorBrush(Colors.Red)
});
}
}
Устанавливаете ли вы свой контекст данных? Обычно я вижу это в .Net 4.0 с WPF, когда модель класса/представления не имеет набора данных datacontext. – tsells
Да, я установил свой контекст данных в конструкторе класса ColorPage .... this.DataContext = TestCollection; – Mahender
Вы установили точку останова в методе 'OnPropertyChanged', чтобы увидеть, действительно ли он вызывает делегат' PropertyChanged'? – PoweredByOrange