WPF XAML,我有一个自定义控件,它包装查找。
在典型的政府方式中,他们有一个查找表来查找所有可能的查找。
我的自定义控件将弹出一个覆盖,要求他们从列表中的项目中进行选择。
我的问题专门与从调用窗体到控件属性到底层控件VM的数据绑定有关。
我这样给控制室打电话:
<Controls:LookupSelector SelectedLookupValueId="{Binding Path=DataContext.SelectedHarvestMethod, ElementName=SurveyFormWindow, Mode=TwoWay}" />
(其他垃圾邮件已删除)
在这种情况下,需要显式DataContext,因为控件的实际DataContext是其自己的视图模型。SelectedHarvestmethod是窗体ViewModel上的属性。
它在“新表单”模式下工作,控件负责设置自己的值(控件包括一个按钮,当您单击它时,会弹出一个弹出窗口,然后您可以选择所需的查找数据值)。
如我所说,这很好,它甚至绑定回上面代码中的“selectedharvestmethod”。我可以很好地使用它,并且确信我的ViewModel始终具有分配给该属性的选定ID。
但现在我正在执行“编辑现有表单”模式,在该模式中,我将从数据库中加载数据,并在视图模型中设置属性。因此,我设置了“selectedHarvestmethod”,代码工作正常(在setter中命中断点),但不会调用“selectedLookupValueID”上的结果setter-该值永远不会通过。
“SelectedLookupValueID”是控件视图模型上的DP:
public static readonly DependencyProperty SelectedLookupValueIdProperty =
DependencyProperty.Register("SelectedLookupValueId", typeof(int), typeof(LookupSelector), new UIPropertyMetadata(0));
public int SelectedLookupValueId
{
get { return (int) GetValue(SelectedLookupValueIdProperty); }
set { SetValue(SelectedLookupValueIdProperty, value); ViewModel.SetPreSelectedLookupValueId(value); }
}
输出窗口或事件日志中或鞋底上没有错误。
插入的调试转换器显示整数值已被定义分配。
正如在注释中提到的,VM当然实现了inotifyPropertyChanged,并且正确地引发了事件。
另外,实际类型是“用户控件”,而不是自定义控件:它涉及XAML。
为什么不调用控件的属性设置器?