В дополнение к свойствам, которые должны быть общедоступными (согласно ответу MichaelS), привязки ссылаются на объект, для которого задан DataContext элемента управления (или DataContext его родителя).
Таким образом, обычно у вас не будет реализации вашего Window INotifyPropertyChanged
, но вы создадите другой класс (обычно называемый ViewModel), который реализует INotifyPropertyChanged
, и установите для него значение DataContext
.
в Window.
, например
public class MainWindowViewModel : INotifyPropertyChanged
{
private GeoCoordinate _center;
public GeoCoordinate Center
{
get { return _center; }
set
{
if (_center == value) return;
_center = value;
RaisePropertyChanged("Center"); }
}
public event PropertyChangedEventHandler PropertyChanged;
void RaisePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
Тогда в вашем MainPage.xaml.cs вы можете сделать что-то вроде этого
public partial class MainPage
{
public MainPage(MainWindowViewModel vm)
{
this.DataContext = vm;
}
}
Конечно, быстрое исправление для вас может заключаться в том, чтобы просто установить свой DataContext для самой страницы.
, например
public partial class MainPage
{
public MainPage()
{
this.DataContext = this;
}
}