Если рассмотреть простой пример использования binding,
<Window x:Class="Wpf_Binding_INotifyDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="110" Width="350">
<StackPanel VerticalAlignment="Stretch">
<Button Grid.Column="0" x:Name="btnStart" Content="Push" Width="45" Height="25"
Click="btnStart_Click"/>
<Label Grid.Column="1"
Content="{Binding Path=IntCounter, StringFormat='String {0}'}"/>
</StackPanel>
</Window>
то можно увидеть, что в этом примере Label все время отображает 0, хотя при нажатии на кнопку переменная IntCounter увеличивает значение на единицу:
private void btnStart_Click(object sender, RoutedEventArgs e)
{
IntCounter++;
}
Чтобы привязка заработала, нужно в код добавить несколько строк:
1. Добавить для главного окна наследование от INotifyPropertyChanged
2. В MainWindow() дописать
this.DataContext = this;
3. Дописать хэндлер для нотификации изменений.
Таким образом окончательный код будет таким:
namespace Wpf_Binding_INotifyDemo
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
private int _IntCounter;
public int IntCounter
{
get
{
return _IntCounter;
}
set
{
_IntCounter = value;
OnPropertyChanged("IntCounter");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public MainWindow()
{
IntCounter = 0;
InitializeComponent();
this.DataContext = this;
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
IntCounter++;
}
}
}
DenTNT недавно публиковал (посмотреть все)
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024
- VSCode: Найти и удалить элементы xml - 29.10.2024
- WordPress: Ошибка в плагине WpDiscuz - 08.10.2024