这是我第一次发布问题。我正在研究这个问题大概一整天,但不明白为什么这个绑定不起作用。无法绑定到DataContext的属性
我想要一个Label来显示名为Plan的类实例的属性“hotspot”的名称。有多个计划,每个计划包含多个热点。当我点击热点时,Plan.SelectedHotSpot
属性将此点击的热点设置为值。如果没有选择HotSpot,它将变为空。
XAML:
<Label Name="lblHotSpotName" />
主窗口后面的代码时,计划从列表框中选择:
private void lstPlans_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
canvas.Plan = PlanBLL.GetPlanByID(plans[lstPlans.SelectedIndex].ID);
lblHotSpotName.DataContext = canvas.Plan;
lblHotSpotName.SetBinding(Label.ContentProperty, "SelectedHotSpot.Name");
}
计划类:
public class Plan : INotifyPropertyChanged
{
private HotSpot selectedHotSpot;
public HotSpot SelectedHotSpot
{
get { return selectedHotSpot; }
set
{
selectedHotSpot = value;
OnPropertyChanged("SelectedHotSpot");
OnPropertyChanged("SelectedHotSpot.Name");
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
此代码似乎没有工作的时候点击热点lblHotSpotName
保持空白。 在我看来,加载计划时SelectedHotSpot为null,因此它不会绑定到加载计划后选定的热点对象。 是我的冒险权吗?这个绑定需要有一个非null的现有对象。而当对象发生变化时,我们需要再次定义从标签到Plan.SelectedHotSpot
的绑定。
感谢您的帮助。
的'HotSpot.Name'属性支持'INotifyPropertyChanged'?当'lstPlans_SelectionChanged'被触发时'canvas.Plan'不是*'null' * * –
HotSpot.Name是一个字符串,在HotSpot类中不会更改,因此不需要为此实现INotifyPropertyChanged接口。当触发lstPlans_SelectionChanged时,canvas.Plan从不为空。只有当窗口被加载时它是空的。 – Youszef
请在Visual Studio的输出窗口中查看并告诉我们您在那里看到的错误。 – Sheridan