我需要将属性绑定到标签。我写了以下代码: 标签的xaml是
<Label Canvas.Left="807.3" Canvas.Top="148.9" Height="33.567" x:Name="label2"
Width="98" FontFamily="Tw Cen MT" FontSize="24" FontWeight="Bold"
Foreground="#FFFEE3A4"
Content="{Binding Path=UserInformation.AccountBalance,Mode=OneWay}">
<Label.Background>
<ImageBrush />
</Label.Background>
</Label>
具有AccountBalance
的班级public class CustomerInformation : INotifyPropertyChanged
{
public CustomerInformation()
{
_Balance = 0.0;
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
public double AccountBalance
{
get { return _Balance; }
set
{
_wepaBalance = value;
FirePropertyChanged("AccountBalance");
}
}
protected void FirePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
datacontext设置如下
this.LayoutRoot.DataContext = this;
在xaml.cs后面编写以下代码以访问UserInfo,这是一个全局对象
public CustomerInformation UserInformation
{
get
{
return Globalobjs._Object.UserInfo;
}
}
xamls.cs仅来自Window。
问题是INotifyPropertyChanged的PropertyChangedEventHandler在调用时始终为null。
任何1可以帮我解决这个问题吗?
答案 0 :(得分:2)
this.LayoutRoot.DataContext = this;
这是Window
,但您将Window
实例设置为DataContext
。将DataContext
设置为UserInformation
。
this.LayoutRoot.DataContext = Globalobjs._Object.UserInfo;
答案 1 :(得分:0)
您要绑定的datacontext是否实现了INotifyPropertyChanged?
如果这不是MVVM模式项目,请确保包含要绑定的属性的类实现该接口,并确保在更改属性时调用该事件的委托(例如OnPropertyChanged(“MyProperty”) “))
如果它是MVVM项目并且您没有使用框架,最好从实现INotifyPropertyChanged的ViewModel基础派生所有ViewModel。
答案 2 :(得分:0)
您正在绑定Windows的DataContext。但Windows DataContext与Windows后面的代码不同,后者在其中定义了UserInformation属性。要访问Window后面代码中定义的属性,必须设置Window的Name属性,然后使用以下绑定:
Content="{Binding ElementName=YourWindowName, Path=UserInformation.AccountBalance,Mode=OneWay}"