这是我第一次发布问题。我研究了整整一天,但仍然不知道为什么这个绑定不起作用。
我想让一个标签(Label)显示对象“hotspot”的名称,该对象是名为Plan的类实例的属性。有多个计划(Plan),每个计划包含多个热点(hotspot)。当我单击一个热点时,属性Plan.SelectedHotSpot
将此点击的热点设置为值。如果没有选择HotSpot,则变为null。
XAML:
<Label Name="lblHotSpotName" />
当从ListBox选择Plan时,MainWindow代码后台:
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
是空的,因此它不会绑定到所选的热点对象。 我的意思是这个绑定需要一个现有的非空对象。当对象发生更改时,我们需要重新定义标签到 Plan.SelectedHotSpot
的绑定。感谢您的帮助。
HotSpot.Name
属性支持INotifyPropertyChanged
吗?当触发lstPlans_SelectionChanged
时,canvas.Plan
不是null
吗? - Anatoliy Nikolaev