数据绑定不工作,出了什么问题?Silverlight WP7
本文关键字:问题 Silverlight WP7 什么 工作 数据绑定 | 更新日期: 2023-09-27 18:10:21
我是Silverlight的新手,我正在尝试使用数据绑定。这看起来很简单,但它不工作,我不知道为什么。
In my MainPage.xaml:
<map:Map Name="bing_map" Height="578" Width="480"
ZoomLevel="{Binding ZoomLevel, Mode=TwoWay}"
Center="{Binding Center, Mode=TwoWay}"
CredentialsProvider="{StaticResource BingMapsKey}" />
正如你所看到的,我正在尝试绑定缩放水平和中心。
我的 mainpage . example .cs
类继承自INotifyPropertyChanged
在构造函数中:
ZoomLevel = 12.0;
Center = new GeoCoordinate(0, 0);
properties: private double _zoom_level;
private double ZoomLevel
{
get { return _zoom_level; }
set {
if (_zoom_level == value) return;
_zoom_level = value;
RaisePropertyChanged("ZoomLevel");}
}
private GeoCoordinate _center;
private 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));
}
我忘了什么吗?
尝试将属性更改为public:
private double _zoom_level;
public double ZoomLevel
{
get { return _zoom_level; }
set {
if (_zoom_level == value) return;
_zoom_level = value;
RaisePropertyChanged("ZoomLevel");}
}
private GeoCoordinate _center;
public GeoCoordinate Center
{
get { return _center; }
set {
if (_center == value) return;
_center = value;
RaisePropertyChanged("Center"); }
}
并设置View DataContext:(正如Ray在他的回答中提到的)
public partial class MainPage
{
public MainPage()
{
this.DataContext = this;
}
}
强烈建议使用MVVM模式。
除了需要是公共的属性(根据MichaelS的回答)之外,绑定还引用了被设置为控件的DataContext(或其父对象的DataContext)的对象。
所以通常你不会让你的窗口实现INotifyPropertyChanged
,但你会创建另一个类(通常称为ViewModel)实现INotifyPropertyChanged
,并设置为窗口的DataContext
。
。
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 . example .cs中你可以这样做
public partial class MainPage
{
public MainPage(MainWindowViewModel vm)
{
this.DataContext = vm;
}
}
当然,快速修复的方法可能是将页面的DataContext设置为自身。
。
public partial class MainPage
{
public MainPage()
{
this.DataContext = this;
}
}